aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2021-07-24 12:55:28 -0400
committerTheodore Ts'o <tytso@mit.edu>2021-07-24 12:55:28 -0400
commitddee43e8e847b25148d694bb5dbec633729e975b (patch)
tree74bd0766dc90e7ddce3cfe0b426868d6def6e1f5
parent4e424586ccbfceb051781b90770a525e2675b0b4 (diff)
downloade2fsprogs-ddee43e8e847b25148d694bb5dbec633729e975b.tar.gz
libext2fs: avoid unnecessary stat(2) calls on mountpoints
If the device name in the mtab or /proc/mounts file does not match with the device passed into ext2fs_check_if_mounted() or ext2fs_check_mount_point(), skip the stat(2) call on the mountpoint, since we never use the results of the stat(2) in that case. Not only does this provide a slight performance win, but it the stat calls on the mountpoints could potentially trigger some SELinux denials that could stress some sysadmins out. Google-Bug-Id: 193137337 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--lib/ext2fs/ismounted.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/ext2fs/ismounted.c b/lib/ext2fs/ismounted.c
index 46d330d98..c9e6a9d0b 100644
--- a/lib/ext2fs/ismounted.c
+++ b/lib/ext2fs/ismounted.c
@@ -128,14 +128,14 @@ static errcode_t check_mntent_file(const char *mtab_file, const char *file,
while ((mnt = getmntent (f)) != NULL) {
if (mnt->mnt_fsname[0] != '/')
continue;
- if (stat(mnt->mnt_dir, &st_buf) != 0)
- continue;
if (strcmp(file, mnt->mnt_fsname) == 0) {
+ if (stat(mnt->mnt_dir, &st_buf) != 0)
+ continue;
if (file_rdev && (file_rdev != st_buf.st_dev)) {
#ifdef DEBUG
printf("Bogus entry in %s! "
- "(%s does not exist)\n",
- mtab_file, mnt->mnt_dir);
+ "(%s is not mounted on %s)\n",
+ mtab_file, file, mnt->mnt_dir);
#endif /* DEBUG */
continue;
}