libbbb: find_mount_point() too eager to stat mounted devices
None of the below "devices" (first word on the line) are real. sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,nosuid,size=7917900k,nr_inodes=1979475,mode=755 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,nosuid,nodev,mode=755 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 tmpfs /tmp tmpfs rw,relatime 0 0 function old new delta find_mount_point 297 302 +5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
fa8878bf1f
commit
f3a064f495
@ -56,11 +56,22 @@ struct mntent* FAST_FUNC find_mount_point(const char *name, int subdir_too)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Is device's dev_t == name's dev_t? */
|
/* Is device's dev_t == name's dev_t? */
|
||||||
if (stat(mountEntry->mnt_fsname, &s) == 0 && s.st_rdev == devno_of_name)
|
if (mountEntry->mnt_fsname[0] == '/'
|
||||||
|
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
* avoid stat'ing "sysfs", "proc", "none" and such,
|
||||||
|
* useless at best, can stat unrelated files at worst.
|
||||||
|
*/
|
||||||
|
&& stat(mountEntry->mnt_fsname, &s) == 0
|
||||||
|
&& s.st_rdev == devno_of_name
|
||||||
|
) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
/* Match the directory's mount point. */
|
/* Match the directory's mount point. */
|
||||||
if (stat(mountEntry->mnt_dir, &s) == 0 && s.st_dev == devno_of_name)
|
if (stat(mountEntry->mnt_dir, &s) == 0
|
||||||
|
&& s.st_dev == devno_of_name
|
||||||
|
) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
endmntent(mtab_fp);
|
endmntent(mtab_fp);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user