From 52babe8054c6428f83c5c028f15063c33ef88e3e Mon Sep 17 00:00:00 2001 From: Ryan Lee Date: Tue, 17 Dec 2024 11:59:54 -0800 Subject: [PATCH] Allow make-* flags with remount operations While the mount syscall documentation disallows this, the kernel silently ignores make-* flags when doing a remount, and real applications were passing this conflicting set of flags. Because changing the kernel to reject this combination would break userspace, we should allow them instead. For an example: see https://bugs.launchpad.net/apparmor/+bug/2091424. Signed-off-by: Ryan Lee --- parser/mount.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/parser/mount.h b/parser/mount.h index 48d8e6b5c..92594cb95 100644 --- a/parser/mount.h +++ b/parser/mount.h @@ -108,7 +108,13 @@ #define MS_MOVE_FLAGS (MS_MOVE) #define MS_CMDS (MS_MOVE | MS_REMOUNT | MS_BIND | MS_RBIND | MS_MAKE_CMDS) -#define MS_REMOUNT_FLAGS (MS_ALL_FLAGS & ~(MS_CMDS & ~MS_REMOUNT & ~MS_BIND & ~MS_RBIND)) +/* + * This allows MS_MAKE_CMDS, by design: while remount and make-* shouldn't be + * used together, real-world applications do use them together, and the Linux + * kernel ignores the make-* flags when doing a remount instead of returning + * EINVAL. See https://bugs.launchpad.net/apparmor/+bug/2091424 for an example. + */ +#define MS_REMOUNT_FLAGS (MS_ALL_FLAGS & ~MS_MOVE_FLAGS) #define MS_NEW_FLAGS (MS_ALL_FLAGS & ~MS_CMDS) #define MNT_SRC_OPT 1