mount: do not pass "comment=ANYTHING" option to kernel. Closes 5240
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 22 Jun 2012 13:17:18 +0000 (15:17 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 22 Jun 2012 13:17:18 +0000 (15:17 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
util-linux/mount.c

index 95dee18eca9ab71367b9c06c103f1e2bf7c1cdaa..b6c94d7ba7e1444ae36be1904441944c4f85639a 100644 (file)
@@ -218,6 +218,7 @@ static const int32_t mount_options[] = {
                IF_DESKTOP(/* "user"  */ MOUNT_USERS,)
                IF_DESKTOP(/* "users" */ MOUNT_USERS,)
                /* "_netdev" */ 0,
+               IF_DESKTOP(/* "comment" */ 0,) /* systemd uses this in fstab */
        )
 
        IF_FEATURE_MOUNT_FLAGS(
@@ -275,6 +276,7 @@ static const char mount_option_str[] =
                IF_DESKTOP("user\0")
                IF_DESKTOP("users\0")
                "_netdev\0"
+               IF_DESKTOP("comment\0") /* systemd uses this in fstab */
        )
        IF_FEATURE_MOUNT_FLAGS(
                // vfs flags
@@ -465,7 +467,11 @@ static unsigned long parse_mount_options(char *options, char **unrecognized)
 // FIXME: use hasmntopt()
                // Find this option in mount_options
                for (i = 0; i < ARRAY_SIZE(mount_options); i++) {
-                       if (strcasecmp(option_str, options) == 0) {
+                       /* We support "option=" match for "comment=" thingy */
+                       unsigned opt_len = strlen(option_str);
+                       if (strncasecmp(option_str, options, opt_len) == 0
+                        && (options[opt_len] == '\0' || options[opt_len] == '=')
+                       ) {
                                unsigned long fl = mount_options[i];
                                if ((long)fl < 0)
                                        flags &= fl;
@@ -473,7 +479,7 @@ static unsigned long parse_mount_options(char *options, char **unrecognized)
                                        flags |= fl;
                                goto found;
                        }
-                       option_str += strlen(option_str) + 1;
+                       option_str += opt_len + 1;
                }
                // We did not recognize this option.
                // If "unrecognized" is not NULL, append option there.