diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2013-03-30 19:57:41 -0700 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2013-08-26 19:17:03 -0700 |
commit | e51db73532955dc5eaba4235e62b74b460709d5b (patch) | |
tree | ef2b73dd5e04d5b97a0bb10e8a163811ce9a3845 /include | |
parent | 4ce5d2b1a8fde84c0eebe70652cf28b9beda6b4e (diff) | |
download | linux-stable-e51db73532955dc5eaba4235e62b74b460709d5b.tar.gz linux-stable-e51db73532955dc5eaba4235e62b74b460709d5b.tar.bz2 linux-stable-e51db73532955dc5eaba4235e62b74b460709d5b.zip |
userns: Better restrictions on when proc and sysfs can be mounted
Rely on the fact that another flavor of the filesystem is already
mounted and do not rely on state in the user namespace.
Verify that the mounted filesystem is not covered in any significant
way. I would love to verify that the previously mounted filesystem
has no mounts on top but there are at least the directories
/proc/sys/fs/binfmt_misc and /sys/fs/cgroup/ that exist explicitly
for other filesystems to mount on top of.
Refactor the test into a function named fs_fully_visible and call that
function from the mount routines of proc and sysfs. This makes this
test local to the filesystems involved and the results current of when
the mounts take place, removing a weird threading of the user
namespace, the mount namespace and the filesystems themselves.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/fs.h | 1 | ||||
-rw-r--r-- | include/linux/user_namespace.h | 4 |
2 files changed, 1 insertions, 4 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 981874773e85..3050c620f062 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1897,6 +1897,7 @@ extern int vfs_ustat(dev_t, struct kstatfs *); extern int freeze_super(struct super_block *super); extern int thaw_super(struct super_block *super); extern bool our_mnt(struct vfsmount *mnt); +extern bool fs_fully_visible(struct file_system_type *); extern int current_umask(void); diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h index b6b215f13b45..4ce009324933 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h @@ -26,8 +26,6 @@ struct user_namespace { kuid_t owner; kgid_t group; unsigned int proc_inum; - bool may_mount_sysfs; - bool may_mount_proc; }; extern struct user_namespace init_user_ns; @@ -84,6 +82,4 @@ static inline void put_user_ns(struct user_namespace *ns) #endif -void update_mnt_policy(struct user_namespace *userns); - #endif /* _LINUX_USER_H */ |