From: Karel Zak Date: Mon, 24 Feb 2025 13:04:53 +0000 (+0100) Subject: Libmount: Fix removal of "owner" option when executed as root X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4aa39b894dbb80eab45af53a011224a43b687b94;p=thirdparty%2Futil-linux.git Libmount: Fix removal of "owner" option when executed as root 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 Signed-off-by: Karel Zak --- diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c index f2fa630f7..fbb200708 100644 --- a/libmount/src/context_mount.c +++ b/libmount/src/context_mount.c @@ -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;