]> err.no Git - util-linux/commitdiff
mount: properly ignore comments in /etc/filesystems
authorMike Frysinger <vapier@gentoo.org>
Sun, 7 Mar 2010 05:16:41 +0000 (00:16 -0500)
committerKarel Zak <kzak@redhat.com>
Thu, 11 Mar 2010 09:23:00 +0000 (10:23 +0100)
The POSIX spec for sscanf() says that whitespace may be matched against 0
bytes which means doing sscanf(" %s") against "#foo" will result in a
match. You can see this behavior by using the verbose options on a garbage
file:

...
mount: you didn't specify a filesystem type for /dev/null
       I will try all types mentioned in /etc/filesystems or /proc/filesystems
Trying #
mount: mount(2) syscall: source: "/dev/null", target: "/", filesystemtype: "#", mountflags: -1058209792, data: (null)
Trying #vfat
mount: mount(2) syscall: source: "/dev/null", target: "/", filesystemtype: "#vfat", mountflags: -1058209792, data: (null)
...

Reported-by: Dave Barton <dave.barton@comodo.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
mount/mount.c

index 0f1fc5a7824f946355067f452f007f7bc7b08c19..0f986df3b920d04926d2c2f7e5f23b94e2c6f0a1 100644 (file)
@@ -782,8 +782,8 @@ procfsnext(FILE *procfs) {
    char fsname[100];
 
    while (fgets(line, sizeof(line), procfs)) {
-      if (sscanf (line, "nodev %[^\n]\n", fsname) == 1) continue;
-      if (sscanf (line, " %[^ \n]\n", fsname) != 1) continue;
+      if (sscanf (line, "nodev %[^#\n]\n", fsname) == 1) continue;
+      if (sscanf (line, " %[^# \n]\n", fsname) != 1) continue;
       return xstrdup(fsname);
    }
    return 0;