aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2016-06-09 16:44:48 -0400
committerEric W. Biederman <ebiederm@xmission.com>2016-06-23 16:47:31 -0400
commitcc50a07a247e17db76b1f0b0ca06652556e04fa3 (patch)
tree64060a2d84ef06285de1f1a13008899dec16a2dc
parent67690f937c38bbab1d94cb45f6a32e61612834ae (diff)
userns: Remove the now unnecessary FS_USERNS_DEV_MOUNT flag
Now that SB_I_NODEV controls the nodev behavior devpts can just clear this flag during mount. Simplifying the code and making it easier to audit how the code works. While still preserving the invariant that s_iflags is only modified during mount. Acked-by: Seth Forshee <seth.forshee@canonical.com> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
-rw-r--r--fs/devpts/inode.c3
-rw-r--r--fs/super.c3
-rw-r--r--include/linux/fs.h1
3 files changed, 3 insertions, 4 deletions
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c
index 37c134a132c7..d116453b0276 100644
--- a/fs/devpts/inode.c
+++ b/fs/devpts/inode.c
@@ -396,6 +396,7 @@ devpts_fill_super(struct super_block *s, void *data, int silent)
396{ 396{
397 struct inode *inode; 397 struct inode *inode;
398 398
399 s->s_iflags &= ~SB_I_NODEV;
399 s->s_blocksize = 1024; 400 s->s_blocksize = 1024;
400 s->s_blocksize_bits = 10; 401 s->s_blocksize_bits = 10;
401 s->s_magic = DEVPTS_SUPER_MAGIC; 402 s->s_magic = DEVPTS_SUPER_MAGIC;
@@ -480,7 +481,7 @@ static struct file_system_type devpts_fs_type = {
480 .name = "devpts", 481 .name = "devpts",
481 .mount = devpts_mount, 482 .mount = devpts_mount,
482 .kill_sb = devpts_kill_sb, 483 .kill_sb = devpts_kill_sb,
483 .fs_flags = FS_USERNS_MOUNT | FS_USERNS_DEV_MOUNT, 484 .fs_flags = FS_USERNS_MOUNT,
484}; 485};
485 486
486/* 487/*
diff --git a/fs/super.c b/fs/super.c
index 25cdceed2ad3..37813bf479cf 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -206,8 +206,7 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags,
206 init_waitqueue_head(&s->s_writers.wait_unfrozen); 206 init_waitqueue_head(&s->s_writers.wait_unfrozen);
207 s->s_bdi = &noop_backing_dev_info; 207 s->s_bdi = &noop_backing_dev_info;
208 s->s_flags = flags; 208 s->s_flags = flags;
209 if ((s->s_user_ns != &init_user_ns) && 209 if (s->s_user_ns != &init_user_ns)
210 !(type->fs_flags & FS_USERNS_DEV_MOUNT))
211 s->s_iflags |= SB_I_NODEV; 210 s->s_iflags |= SB_I_NODEV;
212 INIT_HLIST_NODE(&s->s_instances); 211 INIT_HLIST_NODE(&s->s_instances);
213 INIT_HLIST_BL_HEAD(&s->s_anon); 212 INIT_HLIST_BL_HEAD(&s->s_anon);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index e05983170d23..375e37f42cdf 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2022,7 +2022,6 @@ struct file_system_type {
2022#define FS_BINARY_MOUNTDATA 2 2022#define FS_BINARY_MOUNTDATA 2
2023#define FS_HAS_SUBTYPE 4 2023#define FS_HAS_SUBTYPE 4
2024#define FS_USERNS_MOUNT 8 /* Can be mounted by userns root */ 2024#define FS_USERNS_MOUNT 8 /* Can be mounted by userns root */
2025#define FS_USERNS_DEV_MOUNT 16 /* A userns mount does not imply MNT_NODEV */
2026#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */ 2025#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */
2027 struct dentry *(*mount) (struct file_system_type *, int, 2026 struct dentry *(*mount) (struct file_system_type *, int,
2028 const char *, void *); 2027 const char *, void *);