Skip to content

Commit 593d9e4

Browse files
ytcoodebrauner
authored andcommitted
fs: fix incorrect lflags value in the move_mount syscall
The lflags value used to look up from_path was overwritten by the one used to look up to_path. In other words, from_path was looked up with the wrong lflags value. Fix it. Fixes: f9fde81 ("fs: support getname_maybe_null() in move_mount()") Signed-off-by: Yuntao Wang <[email protected]> Link: https://lore.kernel.org/[email protected] [Christian Brauner <[email protected]>: massage patch] Signed-off-by: Christian Brauner <[email protected]>
1 parent 2319f9d commit 593d9e4

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

fs/namespace.c

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4551,20 +4551,10 @@ SYSCALL_DEFINE5(move_mount,
45514551
if (flags & MOVE_MOUNT_SET_GROUP) mflags |= MNT_TREE_PROPAGATION;
45524552
if (flags & MOVE_MOUNT_BENEATH) mflags |= MNT_TREE_BENEATH;
45534553

4554-
lflags = 0;
4555-
if (flags & MOVE_MOUNT_F_SYMLINKS) lflags |= LOOKUP_FOLLOW;
4556-
if (flags & MOVE_MOUNT_F_AUTOMOUNTS) lflags |= LOOKUP_AUTOMOUNT;
45574554
uflags = 0;
4558-
if (flags & MOVE_MOUNT_F_EMPTY_PATH) uflags = AT_EMPTY_PATH;
4559-
from_name = getname_maybe_null(from_pathname, uflags);
4560-
if (IS_ERR(from_name))
4561-
return PTR_ERR(from_name);
4555+
if (flags & MOVE_MOUNT_T_EMPTY_PATH)
4556+
uflags = AT_EMPTY_PATH;
45624557

4563-
lflags = 0;
4564-
if (flags & MOVE_MOUNT_T_SYMLINKS) lflags |= LOOKUP_FOLLOW;
4565-
if (flags & MOVE_MOUNT_T_AUTOMOUNTS) lflags |= LOOKUP_AUTOMOUNT;
4566-
uflags = 0;
4567-
if (flags & MOVE_MOUNT_T_EMPTY_PATH) uflags = AT_EMPTY_PATH;
45684558
to_name = getname_maybe_null(to_pathname, uflags);
45694559
if (IS_ERR(to_name))
45704560
return PTR_ERR(to_name);
@@ -4577,11 +4567,24 @@ SYSCALL_DEFINE5(move_mount,
45774567
to_path = fd_file(f_to)->f_path;
45784568
path_get(&to_path);
45794569
} else {
4570+
lflags = 0;
4571+
if (flags & MOVE_MOUNT_T_SYMLINKS)
4572+
lflags |= LOOKUP_FOLLOW;
4573+
if (flags & MOVE_MOUNT_T_AUTOMOUNTS)
4574+
lflags |= LOOKUP_AUTOMOUNT;
45804575
ret = filename_lookup(to_dfd, to_name, lflags, &to_path, NULL);
45814576
if (ret)
45824577
return ret;
45834578
}
45844579

4580+
uflags = 0;
4581+
if (flags & MOVE_MOUNT_F_EMPTY_PATH)
4582+
uflags = AT_EMPTY_PATH;
4583+
4584+
from_name = getname_maybe_null(from_pathname, uflags);
4585+
if (IS_ERR(from_name))
4586+
return PTR_ERR(from_name);
4587+
45854588
if (!from_name && from_dfd >= 0) {
45864589
CLASS(fd_raw, f_from)(from_dfd);
45874590
if (fd_empty(f_from))
@@ -4590,6 +4593,11 @@ SYSCALL_DEFINE5(move_mount,
45904593
return vfs_move_mount(&fd_file(f_from)->f_path, &to_path, mflags);
45914594
}
45924595

4596+
lflags = 0;
4597+
if (flags & MOVE_MOUNT_F_SYMLINKS)
4598+
lflags |= LOOKUP_FOLLOW;
4599+
if (flags & MOVE_MOUNT_F_AUTOMOUNTS)
4600+
lflags |= LOOKUP_AUTOMOUNT;
45934601
ret = filename_lookup(from_dfd, from_name, lflags, &from_path, NULL);
45944602
if (ret)
45954603
return ret;

0 commit comments

Comments
 (0)