diff options
author | Joel Stanley <joel@jms.id.au> | 2016-08-04 13:24:41 +0930 |
---|---|---|
committer | Joel Stanley <joel@jms.id.au> | 2016-08-04 13:24:41 +0930 |
commit | b916113d820adc856aad6b8ebc1a25403ff7f293 (patch) | |
tree | abddf239d912c4868faf9fbc69c67d980f74c7df /fs/namespace.c | |
parent | 2e4db6c6be91ade074c1a150a6db2aeb4920e25c (diff) | |
parent | b05965f284db3e086022f4e318e46cb5bffb1376 (diff) | |
download | talos-obmc-linux-openbmc-4.4-20160804-1.tar.gz talos-obmc-linux-openbmc-4.4-20160804-1.zip |
Merge tag 'v4.4.16' into dev-4.4openbmc-4.4-20160804-1
This is the 4.4.16 stable release
Signed-off-by: Joel Stanley <joel@jms.id.au>
Diffstat (limited to 'fs/namespace.c')
-rw-r--r-- | fs/namespace.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index 0570729c87fd..33064fcbfff9 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -2401,8 +2401,10 @@ static int do_new_mount(struct path *path, const char *fstype, int flags, mnt_flags |= MNT_NODEV | MNT_LOCK_NODEV; } if (type->fs_flags & FS_USERNS_VISIBLE) { - if (!fs_fully_visible(type, &mnt_flags)) + if (!fs_fully_visible(type, &mnt_flags)) { + put_filesystem(type); return -EPERM; + } } } @@ -3236,6 +3238,10 @@ static bool fs_fully_visible(struct file_system_type *type, int *new_mnt_flags) if (mnt->mnt.mnt_sb->s_iflags & SB_I_NOEXEC) mnt_flags &= ~(MNT_LOCK_NOSUID | MNT_LOCK_NOEXEC); + /* Don't miss readonly hidden in the superblock flags */ + if (mnt->mnt.mnt_sb->s_flags & MS_RDONLY) + mnt_flags |= MNT_LOCK_READONLY; + /* Verify the mount flags are equal to or more permissive * than the proposed new mount. */ @@ -3262,7 +3268,7 @@ static bool fs_fully_visible(struct file_system_type *type, int *new_mnt_flags) list_for_each_entry(child, &mnt->mnt_mounts, mnt_child) { struct inode *inode = child->mnt_mountpoint->d_inode; /* Only worry about locked mounts */ - if (!(mnt_flags & MNT_LOCKED)) + if (!(child->mnt.mnt_flags & MNT_LOCKED)) continue; /* Is the directory permanetly empty? */ if (!is_empty_dir_inode(inode)) |