From: Theodore Ts'o Date: Mon, 25 Sep 2006 02:33:38 +0000 (-0400) Subject: blkid_devno_to_devname(): Avoid recursive loops due to symlinks in /dev X-Git-Tag: E2FSPROGS-1_40-WIP-1114~45 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=5b984ab51f774b16ce8f11e46388fba4ac631755;p=tools%2Fe2fsprogs.git blkid_devno_to_devname(): Avoid recursive loops due to symlinks in /dev Signed-off-by: "Theodore Ts'o" --- diff --git a/lib/blkid/ChangeLog b/lib/blkid/ChangeLog index e4939e0..b0a8098 100644 --- a/lib/blkid/ChangeLog +++ b/lib/blkid/ChangeLog @@ -1,3 +1,8 @@ +2006-09-24 Theodore Tso + + * devno.c (scan_dir): Don't follow symlinks when recursively + searching directories under /dev. + 2006-09-17 Karel Zak * probe.c (probe_fat): Fix problem with empty FAT label. diff --git a/lib/blkid/devno.c b/lib/blkid/devno.c index bd9fc12..61b34bf 100644 --- a/lib/blkid/devno.c +++ b/lib/blkid/devno.c @@ -120,15 +120,16 @@ static void scan_dir(char *dirname, dev_t devno, struct dir_list **list, if (stat(path, &st) < 0) continue; - if (S_ISDIR(st.st_mode)) - add_to_dirlist(path, list); - else if (S_ISBLK(st.st_mode) && st.st_rdev == devno) { + if (S_ISBLK(st.st_mode) && st.st_rdev == devno) { *devname = blkid_strdup(path); DBG(DEBUG_DEVNO, printf("found 0x%llx at %s (%p)\n", (long long)devno, path, *devname)); break; } + if (S_ISDIR(st.st_mode) && !lstat(path, &st) && + S_ISDIR(st.st_mode)) + add_to_dirlist(path, list); } closedir(dir); return;