aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/fs.h
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2016-05-23 15:51:59 -0400
committerEric W. Biederman <ebiederm@xmission.com>2016-06-23 16:41:53 -0400
commitd91ee87d8d85a0808c01787e8b4a6b48f2ba487b (patch)
tree1399ccf15d61a3a1dbdd5b89e1673a01325588ae /include/linux/fs.h
parentb236017acffa73d52eac9427f42d8993067d20fb (diff)
vfs: Pass data, ns, and ns->userns to mount_ns
Today what is normally called data (the mount options) is not passed to fill_super through mount_ns. Pass the mount options and the namespace separately to mount_ns so that filesystems such as proc that have mount options, can use mount_ns. Pass the user namespace to mount_ns so that the standard permission check that verifies the mounter has permissions over the namespace can be performed in mount_ns instead of in each filesystems .mount method. Thus removing the duplication between mqueuefs and proc in terms of permission checks. The extra permission check does not currently affect the rpc_pipefs filesystem and the nfsd filesystem as those filesystems do not currently allow unprivileged mounts. Without unpvileged mounts it is guaranteed that the caller has already passed capable(CAP_SYS_ADMIN) which guarantees extra permission check will pass. Update rpc_pipefs and the nfsd filesystem to ensure that the network namespace reference is always taken in fill_super and always put in kill_sb so that the logic is simpler and so that errors originating inside of fill_super do not cause a network namespace leak. Acked-by: Seth Forshee <seth.forshee@canonical.com> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r--include/linux/fs.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 71988dd3af95..1ce006a24f49 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2034,8 +2034,9 @@ struct file_system_type {
2034 2034
2035#define MODULE_ALIAS_FS(NAME) MODULE_ALIAS("fs-" NAME) 2035#define MODULE_ALIAS_FS(NAME) MODULE_ALIAS("fs-" NAME)
2036 2036
2037extern struct dentry *mount_ns(struct file_system_type *fs_type, int flags, 2037extern struct dentry *mount_ns(struct file_system_type *fs_type,
2038 void *data, int (*fill_super)(struct super_block *, void *, int)); 2038 int flags, void *data, void *ns, struct user_namespace *user_ns,
2039 int (*fill_super)(struct super_block *, void *, int));
2039extern struct dentry *mount_bdev(struct file_system_type *fs_type, 2040extern struct dentry *mount_bdev(struct file_system_type *fs_type,
2040 int flags, const char *dev_name, void *data, 2041 int flags, const char *dev_name, void *data,
2041 int (*fill_super)(struct super_block *, void *, int)); 2042 int (*fill_super)(struct super_block *, void *, int));