procfs: set ->user_ns before calling ->get_tree()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 12 May 2019 22:10:24 +0000 (18:10 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 25 May 2019 22:00:00 +0000 (18:00 -0400)
here it's even simpler than in mqueue - pid_ns_prepare_proc()
does everything needed anyway.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/proc/root.c

index 8b145e7b96614a8da1f5df306fae771539a613a3..74c2c6ab10bdc6613c0c8b6d79fd8a6e39bbd8cf 100644 (file)
@@ -157,8 +157,6 @@ static int proc_get_tree(struct fs_context *fc)
 {
        struct proc_fs_context *ctx = fc->fs_private;
 
-       put_user_ns(fc->user_ns);
-       fc->user_ns = get_user_ns(ctx->pid_ns->user_ns);
        fc->s_fs_info = ctx->pid_ns;
        return vfs_get_super(fc, vfs_get_keyed_super, proc_fill_super);
 }
@@ -167,8 +165,7 @@ static void proc_fs_context_free(struct fs_context *fc)
 {
        struct proc_fs_context *ctx = fc->fs_private;
 
-       if (ctx->pid_ns)
-               put_pid_ns(ctx->pid_ns);
+       put_pid_ns(ctx->pid_ns);
        kfree(ctx);
 }
 
@@ -188,6 +185,8 @@ static int proc_init_fs_context(struct fs_context *fc)
                return -ENOMEM;
 
        ctx->pid_ns = get_pid_ns(task_active_pid_ns(current));
+       put_user_ns(fc->user_ns);
+       fc->user_ns = get_user_ns(ctx->pid_ns->user_ns);
        fc->fs_private = ctx;
        fc->ops = &proc_fs_context_ops;
        return 0;