]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
Remounts bind mounts if read-only flag is provided
authorAbin Shahab <ashahab@altiscale.com>
Wed, 12 Nov 2014 00:06:52 +0000 (00:06 +0000)
committerStéphane Graber <stgraber@ubuntu.com>
Mon, 1 Dec 2014 21:27:27 +0000 (16:27 -0500)
Bind mounts do not honor filesystem mount options. This change will
remount filesystems that are bind mounted if there are changes to
filesystem mount options, specifically if the mount is readonly.

Signed-off-by: Abin Shahab <ashahab@altiscale.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/conf.c

index 2a4d5c5b4a3d3cb00b4bc06ba6a825e61c26f2ec..cb30d56b8210ddfc4d719742170700de6940097b 100644 (file)
@@ -2054,10 +2054,12 @@ static int mount_entry(const char *fsname, const char *target,
        if ((mountflags & MS_REMOUNT) || (mountflags & MS_BIND)) {
                DEBUG("remounting %s on %s to respect bind or remount options",
                      fsname ? fsname : "(none)", target ? target : "(none)");
-
+               unsigned long rqd_flags = 0;
+               if (mountflags & MS_RDONLY)
+                       rqd_flags |= MS_RDONLY;
 #ifdef HAVE_STATVFS
                if (statvfs(fsname, &sb) == 0) {
-                       unsigned long required_flags = 0;
+                       unsigned long required_flags = rqd_flags;
                        if (sb.f_flag & MS_NOSUID)
                                required_flags |= MS_NOSUID;
                        if (sb.f_flag & MS_NODEV)
@@ -2073,7 +2075,7 @@ static int mount_entry(const char *fsname, const char *target,
                         * mountflags, then skip the remount
                         */
                        if (!(mountflags & MS_REMOUNT)) {
-                               if (!(required_flags & ~mountflags)) {
+                               if (!(required_flags & ~mountflags) && rqd_flags == 0) {
                                        DEBUG("mountflags already was %lu, skipping remount",
                                                mountflags);
                                        goto skipremount;