[git commit] lsscsi: fix xchdir("..") from symlink in /sys/bus/scsi/devices

Denys Vlasenko vda.linux at googlemail.com
Sun Oct 22 08:43:43 UTC 2017


commit: https://git.busybox.net/busybox/commit/?id=045327a418d1cf0a99405ca0b70ed61b5c1a1869
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Markus Gothe <nietzsche at lysator.liu.se>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/lsscsi.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/miscutils/lsscsi.c b/miscutils/lsscsi.c
index d7cd510..0aaa01d 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)


More information about the busybox-cvs mailing list