Skip to content

Commit f5e395a

Browse files
ytcoodegregkh
authored andcommitted
fs: fix incorrect lflags value in the move_mount syscall
[ Upstream commit 593d9e4 ] 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 <yuntao.wang@linux.dev> Link: https://lore.kernel.org/20250811052426.129188-1-yuntao.wang@linux.dev [Christian Brauner <brauner@kernel.org>: massage patch] Signed-off-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent b68b61b commit f5e395a

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
@@ -4657,20 +4657,10 @@ SYSCALL_DEFINE5(move_mount,
46574657
if (flags & MOVE_MOUNT_SET_GROUP) mflags |= MNT_TREE_PROPAGATION;
46584658
if (flags & MOVE_MOUNT_BENEATH) mflags |= MNT_TREE_BENEATH;
46594659

4660-
lflags = 0;
4661-
if (flags & MOVE_MOUNT_F_SYMLINKS) lflags |= LOOKUP_FOLLOW;
4662-
if (flags & MOVE_MOUNT_F_AUTOMOUNTS) lflags |= LOOKUP_AUTOMOUNT;
46634660
uflags = 0;
4664-
if (flags & MOVE_MOUNT_F_EMPTY_PATH) uflags = AT_EMPTY_PATH;
4665-
from_name = getname_maybe_null(from_pathname, uflags);
4666-
if (IS_ERR(from_name))
4667-
return PTR_ERR(from_name);
4661+
if (flags & MOVE_MOUNT_T_EMPTY_PATH)
4662+
uflags = AT_EMPTY_PATH;
46684663

4669-
lflags = 0;
4670-
if (flags & MOVE_MOUNT_T_SYMLINKS) lflags |= LOOKUP_FOLLOW;
4671-
if (flags & MOVE_MOUNT_T_AUTOMOUNTS) lflags |= LOOKUP_AUTOMOUNT;
4672-
uflags = 0;
4673-
if (flags & MOVE_MOUNT_T_EMPTY_PATH) uflags = AT_EMPTY_PATH;
46744664
to_name = getname_maybe_null(to_pathname, uflags);
46754665
if (IS_ERR(to_name))
46764666
return PTR_ERR(to_name);
@@ -4683,11 +4673,24 @@ SYSCALL_DEFINE5(move_mount,
46834673
to_path = fd_file(f_to)->f_path;
46844674
path_get(&to_path);
46854675
} else {
4676+
lflags = 0;
4677+
if (flags & MOVE_MOUNT_T_SYMLINKS)
4678+
lflags |= LOOKUP_FOLLOW;
4679+
if (flags & MOVE_MOUNT_T_AUTOMOUNTS)
4680+
lflags |= LOOKUP_AUTOMOUNT;
46864681
ret = filename_lookup(to_dfd, to_name, lflags, &to_path, NULL);
46874682
if (ret)
46884683
return ret;
46894684
}
46904685

4686+
uflags = 0;
4687+
if (flags & MOVE_MOUNT_F_EMPTY_PATH)
4688+
uflags = AT_EMPTY_PATH;
4689+
4690+
from_name = getname_maybe_null(from_pathname, uflags);
4691+
if (IS_ERR(from_name))
4692+
return PTR_ERR(from_name);
4693+
46914694
if (!from_name && from_dfd >= 0) {
46924695
CLASS(fd_raw, f_from)(from_dfd);
46934696
if (fd_empty(f_from))
@@ -4696,6 +4699,11 @@ SYSCALL_DEFINE5(move_mount,
46964699
return vfs_move_mount(&fd_file(f_from)->f_path, &to_path, mflags);
46974700
}
46984701

4702+
lflags = 0;
4703+
if (flags & MOVE_MOUNT_F_SYMLINKS)
4704+
lflags |= LOOKUP_FOLLOW;
4705+
if (flags & MOVE_MOUNT_F_AUTOMOUNTS)
4706+
lflags |= LOOKUP_AUTOMOUNT;
46994707
ret = filename_lookup(from_dfd, from_name, lflags, &from_path, NULL);
47004708
if (ret)
47014709
return ret;

0 commit comments

Comments
 (0)