summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-07-05 11:21:36 +0900
committerLinus Torvalds <torvalds@linux-foundation.org>2019-07-05 11:21:36 +0900
commit2cd7cdc7e420a343743db781484e801fd784a1f1 (patch)
tree905bc14c6cd00ba92a56ee8ab5cb809451bb5d06 /fs
parentc212ddaee2fd21e8d756dbc3c6119e3259b38fd0 (diff)
parent570d7a98e7d6d5d8706d94ffd2d40adeaa318332 (diff)
downloadlinux-2cd7cdc7e420a343743db781484e801fd784a1f1.tar.bz2
Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull do_move_mount() fix from Al Viro: "Regression fix" * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: vfs: move_mount: reject moving kernel internal mounts
Diffstat (limited to 'fs')
-rw-r--r--fs/namespace.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/namespace.c b/fs/namespace.c
index 7660c2749c96..6fbc9126367a 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2596,11 +2596,12 @@ static int do_move_mount(struct path *old_path, struct path *new_path)
if (!check_mnt(p))
goto out;
- /* The thing moved should be either ours or completely unattached. */
- if (attached && !check_mnt(old))
+ /* The thing moved must be mounted... */
+ if (!is_mounted(&old->mnt))
goto out;
- if (!attached && !(ns && is_anon_ns(ns)))
+ /* ... and either ours or the root of anon namespace */
+ if (!(attached ? check_mnt(old) : is_anon_ns(ns)))
goto out;
if (old->mnt.mnt_flags & MNT_LOCKED)