summaryrefslogtreecommitdiff
path: root/libbb/find_root_device.c
diff options
context:
space:
mode:
authorEric Andersen2004-01-13 11:39:22 +0000
committerEric Andersen2004-01-13 11:39:22 +0000
commit1cda715bbcaba253ffb81463f6b9260154e7a32d (patch)
tree9a0ba9636cfe7c96b86d89fc6b6521ea1408985e /libbb/find_root_device.c
parent7c87b67c08b7fe379f203ecdfff6bb7d604719a5 (diff)
downloadbusybox-1cda715bbcaba253ffb81463f6b9260154e7a32d.zip
busybox-1cda715bbcaba253ffb81463f6b9260154e7a32d.tar.gz
Fix a bug where mount could check the wrong device. st_rdev is the correct
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
Diffstat (limited to 'libbb/find_root_device.c')
-rw-r--r--libbb/find_root_device.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libbb/find_root_device.c b/libbb/find_root_device.c
index c595321..836ce44 100644
--- a/libbb/find_root_device.c
+++ b/libbb/find_root_device.c
@@ -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)