mount: don't reuse flags from statvfs directly for remounting
authorRobert Swiecki <robert@swiecki.net>
Thu, 26 Oct 2017 00:17:52 +0000 (02:17 +0200)
committerRobert Swiecki <robert@swiecki.net>
Thu, 26 Oct 2017 00:17:52 +0000 (02:17 +0200)
mount.c

diff --git a/mount.c b/mount.c
index a1d2988e07be4a9dbd3ef351fbd183bbf6c8ffdb..d567b4ac4a7617a7b30572fb6d4c6b3e2f90dab9 100644 (file)
--- a/mount.c
+++ b/mount.c
@@ -231,13 +231,20 @@ static bool mountRemountRO(struct mounts_t* mpt) {
                PLOG_W("statvfs('%s')", mpt->dst);
                return false;
        }
-       /*
-        * It's fine to use 'flags | vfs.f_flag' here as per
-        * /usr/include/x86_64-linux-gnu/bits/statvfs.h: 'Definitions for
-        * the flag in `f_flag'.  These definitions should be
-        * kept in sync with the definitions in <sys/mount.h>'
-        */
-       unsigned long new_flags = MS_REMOUNT | MS_RDONLY | vfs.f_flag;
+
+       unsigned long new_flags = MS_REMOUNT | MS_RDONLY | MS_BIND;
+       if (vfs.f_flag & ST_RDONLY) {
+               new_flags |= MS_RDONLY;
+       }
+       if (vfs.f_flag & ST_NOSUID) {
+               new_flags |= MS_NOSUID;
+       }
+       if (vfs.f_flag & ST_NODEV) {
+               new_flags |= MS_NODEV;
+       }
+       if (vfs.f_flag & ST_NOEXEC) {
+               new_flags |= MS_NOEXEC;
+       }
 
        LOG_D("Re-mounting R/O '%s' (flags:%s)", mpt->dst, mountFlagsToStr(new_flags));