Fix a bug where mount could check the wrong device. st_rdev is the correct
authorEric Andersen <andersen@codepoet.org>
Tue, 13 Jan 2004 11:39:22 +0000 (11:39 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 13 Jan 2004 11:39:22 +0000 (11:39 -0000)
device ID iff the named file is a character or block special device.  Otherwise
it is meaningless junk, in which case st_dev should be used.  This was done
incorrectly, which could cause mount to display bogus mount info.
 -Erik

libbb/find_root_device.c

index c595321..836ce44 100644 (file)
@@ -38,8 +38,11 @@ extern char *find_real_root_device_name(const char* name)
        if (stat("/", &rootStat) != 0) 
                bb_perror_msg("could not stat '/'");
        else {
-               if ((dev = rootStat.st_rdev)==0) 
-                       dev=rootStat.st_dev;
+               /* This check is here in case they pass in /dev name */
+               if ((rootStat.st_mode & S_IFMT) == S_IFBLK)
+                       dev = rootStat.st_rdev;
+               else
+                       dev = rootStat.st_dev;
 
                dir = opendir("/dev");
                if (!dir)