From 0687a5b496a05cbc06f3bcdc517a2e6cabc535df Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 8 Mar 2012 00:28:24 +0100 Subject: [PATCH] libbb: make xchroot do a chdir("/") after chroot Signed-off-by: Denys Vlasenko --- coreutils/chroot.c | 1 - libbb/xfuncs_printf.c | 1 + networking/ftpd.c | 3 +-- procps/sysctl.c | 4 ++-- runit/chpst.c | 3 +-- util-linux/switch_root.c | 2 +- 6 files changed, 6 insertions(+), 8 deletions(-) diff --git a/coreutils/chroot.c b/coreutils/chroot.c index ab8beb023..633e66b38 100644 --- a/coreutils/chroot.c +++ b/coreutils/chroot.c @@ -31,7 +31,6 @@ int chroot_main(int argc UNUSED_PARAM, char **argv) if (!*argv) bb_show_usage(); xchroot(*argv); - xchdir("/"); ++argv; if (!*argv) { /* no 2nd param (PROG), use shell */ diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c index 56ee459e4..d8a42ba0b 100644 --- a/libbb/xfuncs_printf.c +++ b/libbb/xfuncs_printf.c @@ -362,6 +362,7 @@ void FAST_FUNC xchroot(const char *path) { if (chroot(path)) bb_perror_msg_and_die("can't change root directory to %s", path); + xchdir("/"); } // Print a warning message if opendir() fails, but don't die. diff --git a/networking/ftpd.c b/networking/ftpd.c index e38138c0a..1c97df564 100644 --- a/networking/ftpd.c +++ b/networking/ftpd.c @@ -1179,8 +1179,7 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv) #endif if (argv[optind]) { - xchdir(argv[optind]); - chroot("."); + xchroot(argv[optind]); } //umask(077); - admin can set umask before starting us diff --git a/procps/sysctl.c b/procps/sysctl.c index cb3b6a25a..5296d0f58 100644 --- a/procps/sysctl.c +++ b/procps/sysctl.c @@ -224,7 +224,7 @@ static int sysctl_handle_preload_file(const char *filename) parser = config_open(filename); /* Must do it _after_ config_open(): */ xchdir("/proc/sys"); - /* xchroot(".") - if you are paranoid */ + /* xchroot("/proc/sys") - if you are paranoid */ //TODO: ';' is comment char too //TODO: comment may be only at line start. "var=1 #abc" - "1 #abc" is the value @@ -260,7 +260,7 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv) return sysctl_handle_preload_file(*argv ? *argv : "/etc/sysctl.conf"); } xchdir("/proc/sys"); - /* xchroot(".") - if you are paranoid */ + /* xchroot("/proc/sys") - if you are paranoid */ if (opt & (FLAG_TABLE_FORMAT | FLAG_SHOW_ALL)) { return sysctl_act_recursive("."); } diff --git a/runit/chpst.c b/runit/chpst.c index 9b8c99bdd..ac296babf 100644 --- a/runit/chpst.c +++ b/runit/chpst.c @@ -417,8 +417,7 @@ int chpst_main(int argc UNUSED_PARAM, char **argv) } if (opt & OPT_root) { - xchdir(root); - xchroot("."); + xchroot(root); } if (opt & OPT_u) { diff --git a/util-linux/switch_root.c b/util-linux/switch_root.c index db6ae3542..a301b365b 100644 --- a/util-linux/switch_root.c +++ b/util-linux/switch_root.c @@ -114,7 +114,7 @@ int switch_root_main(int argc UNUSED_PARAM, char **argv) } xchroot("."); // The chdir is needed to recalculate "." and ".." links - xchdir("/"); + /*xchdir("/"); - done in xchroot */ // If a new console specified, redirect stdin/stdout/stderr to it if (console) {