]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: fix umount --read-only
authorKarel Zak <kzak@redhat.com>
Tue, 23 Apr 2024 08:29:37 +0000 (10:29 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 24 Apr 2024 10:07:24 +0000 (12:07 +0200)
Reported-by: Krzysztof Olędzki <ole@ans.pl>
Signed-off-by: Karel Zak <kzak@redhat.com>
(cherry picked from commit a20e7e23a8565e01b1c84de6924d1fbbdb1cfccc)

libmount/src/context_umount.c

index 26394d51efb71e04b5dfe612ba2fe322fbcd20d8..c8792874b25a0617e18724cb871f03e516c9c59a 100644 (file)
@@ -267,6 +267,9 @@ static int lookup_umount_fs_by_statfs(struct libmnt_context *cxt, const char *tg
         * So, let's use statfs() if possible (it's bad idea for --lazy/--force
         * umounts as target is probably unreachable NFS, also for --detach-loop
         * as this additionally needs to know the name of the loop device).
+        *
+        * For the "umount --read-only" command, we need to read the mountinfo
+        * to obtain the mount source.
         */
        if (mnt_context_is_restricted(cxt)
            || *tgt != '/'
@@ -275,6 +278,7 @@ static int lookup_umount_fs_by_statfs(struct libmnt_context *cxt, const char *tg
            || mnt_context_is_lazy(cxt)
            || mnt_context_is_nocanonicalize(cxt)
            || mnt_context_is_loopdel(cxt)
+           || mnt_context_is_rdonly_umount(cxt)
            || mnt_safe_stat(tgt, &st) != 0 || !S_ISDIR(st.st_mode)
            || has_utab_entry(cxt, tgt))
                return 1; /* not found */