]> 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>
Mon, 22 Mar 2010 08:10:56 +0000 (09:10 +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 efe1165424d1febfdf2a0bde18b6cdeaac921086..45f96991da721ec9acc05fa8e68ac4428c5165b9 100644 (file)
@@ -767,8 +767,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;