]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
mount: Fix bind-mounting read-only shares
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Dec 2022 18:06:26 +0000 (18:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Dec 2022 18:06:26 +0000 (18:06 +0000)
Fixes: #12968
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/mount.c

index c00bc658f5b6cf748b4169fe242e707fecba1187..72ba4ac57fa97768e740799a6a7899c9ef4f6876 100644 (file)
@@ -421,6 +421,18 @@ int pakfire_bind(struct pakfire* pakfire, const char* src, const char* dst, int
                        return 1;
        }
 
+       // The Linux kernel seems to be quite funny when trying to bind-mount something
+       // as read-only and requires us to mount the source first, and then remount it
+       // again using MS_RDONLY.
+       if (flags & MS_RDONLY) {
+               r = pakfire_mount(pakfire, src, mountpoint, NULL, MS_BIND|MS_REC, NULL);
+               if (r)
+                       return r;
+
+               // Add the remount flag
+               flags |= MS_REMOUNT;
+       }
+
        // Perform mount
-       return pakfire_mount(pakfire, src, mountpoint, NULL, flags|MS_REC|MS_BIND, NULL);
+       return pakfire_mount(pakfire, src, mountpoint, NULL, flags|MS_BIND|MS_REC, NULL);
 }