]> err.no Git - util-linux/commitdiff
mount: sanity check mount flags for MS_PROPAGATION
authorKarel Zak <kzak@redhat.com>
Fri, 27 Aug 2010 10:22:27 +0000 (12:22 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 27 Aug 2010 10:22:27 +0000 (12:22 +0200)
 mount(8) reuses mount flags from fstab/mtab, the problem is that for
 MS_PROPAGATION operations kernel incorrectly evaluates mount flags if
 the flags contains any non-propagation stuff (e.g. MS_RDONLY). For
 example --make-shared on read-only FS:

   # strace -e mount mount --make-shared /mnt/test
   mount("/dev/sda1", "/mnt/test", "none", MS_RDONLY|MS_SHARED, NULL) = 0

 must be:

   # strace -e mount mount --make-shared /mnt/test
   mount("/dev/sda1", "/mnt/test", "none", MS_SHARED, NULL) = 0

Reported-by: Valerie Aurora <vaurora@redhat.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
mount/mount.c

index 2e819e95b7c8b758a723236d823e4c48593fe92b..f2b6ee23e2db94b246d7030a22e47c23625d0008 100644 (file)
@@ -491,9 +491,11 @@ parse_opts (const char *options, int *flags, char **extra_opts) {
        if (readwrite)
                *flags &= ~MS_RDONLY;
 
-       if (mounttype & MS_PROPAGATION)
-               *flags &= ~MS_BIND;
        *flags |= mounttype;
+
+       /* The propagation flags should not be used together with any other flags */
+       if (*flags & MS_PROPAGATION)
+               *flags &= MS_PROPAGATION;
 }
 
 /* Try to build a canonical options string.  */