]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
Libmount: Fix removal of "owner" option when executed as root
authorKarel Zak <kzak@redhat.com>
Mon, 24 Feb 2025 13:04:53 +0000 (14:04 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 24 Feb 2025 13:04:53 +0000 (14:04 +0100)
When executed as root, libmount replaces the "owner" and "group" mount
options with "nosuid, nodev, ..." However, this can result in an
"invalid argument" error because libmount removes the unwanted options
first and then tries to address the location for the new options using
the already removed options. To fix this, we need to reverse the order
of operations.

Reported-by: hxinzhe <hxinzhe1024@163.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
libmount/src/context_mount.c

index f2fa630f7a6c00c9ff4ea6bfaa601e049905bd52..fbb20070812bc5a29e8f354ece4d306e540c341b 100644 (file)
@@ -203,10 +203,6 @@ static int evaluate_permissions(struct libmnt_context *cxt)
                 *
                 * The old deprecated way is to use mnt_optstr_get_flags().
                 */
-               if (user_flags & (MNT_MS_OWNER | MNT_MS_GROUP))
-                       rc = mnt_optlist_remove_flags(ol,
-                                       MNT_MS_OWNER | MNT_MS_GROUP, cxt->map_userspace);
-
                if (!rc && (user_flags & MNT_MS_OWNER))
                        rc = mnt_optlist_insert_flags(ol,
                                        MS_OWNERSECURE, cxt->map_linux,
@@ -227,6 +223,10 @@ static int evaluate_permissions(struct libmnt_context *cxt)
                        rc = mnt_optlist_insert_flags(ol, MS_SECURE, cxt->map_linux,
                                        MNT_MS_USERS, cxt->map_userspace);
 
+               if (user_flags & (MNT_MS_OWNER | MNT_MS_GROUP))
+                       rc = mnt_optlist_remove_flags(ol,
+                                       MNT_MS_OWNER | MNT_MS_GROUP, cxt->map_userspace);
+
                DBG(CXT, ul_debugobj(cxt, "perms: superuser [rc=%d]", rc));
                if (rc)
                        return rc;