From 045327a418d1cf0a99405ca0b70ed61b5c1a1869 Mon Sep 17 00:00:00 2001 From: Markus Gothe Date: Sat, 21 Oct 2017 21:34:22 +0200 Subject: [PATCH] lsscsi: fix xchdir("..") from symlink in /sys/bus/scsi/devices Signed-off-by: Markus Gothe Signed-off-by: Denys Vlasenko --- miscutils/lsscsi.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/miscutils/lsscsi.c b/miscutils/lsscsi.c index d7cd51056..0aaa01ded 100644 --- a/miscutils/lsscsi.c +++ b/miscutils/lsscsi.c @@ -25,6 +25,8 @@ #include "libbb.h" +static const char scsi_dir[] ALIGN1 = "/sys/bus/scsi/devices"; + static char *get_line(const char *filename, char *buf, unsigned *bufsize_p) { unsigned bufsize = *bufsize_p; @@ -53,7 +55,7 @@ int lsscsi_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) struct dirent *de; DIR *dir; - xchdir("/sys/bus/scsi/devices"); + xchdir(scsi_dir); dir = xopendir("."); while ((de = readdir(dir)) != NULL) { @@ -112,7 +114,10 @@ int lsscsi_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) ); /* TODO: also output device column, e.g. "/dev/sdX" */ - xchdir(".."); + /* chdir("..") may not work as expected, + * since we might have followed a symlink. + */ + xchdir(scsi_dir); } if (ENABLE_FEATURE_CLEAN_UP)