On 12/4/2011 5:55 PM, Denys Vlasenko wrote:
On Friday 02 December 2011 05:45, Bart Kus wrote:
jo tmp # PATH=/bin:/usr/bin /usr/bin/chroot ram bin/busybox ash
/ # echo $PATH
/bin:/usr/bin
/ # uname
ash: uname: not found
/ #
I can't reproduce it with your .config - for me, uname runs just fine
in the setup similar to those shown above.
Can you post the strace of the attempt to execute "uname" in ash?
This was found to be the lack of a /proc mount (/proc/self/exe not
avail) and the CONFIG_FEATURE_PREFER_APPLETS was set. Having said that,
here's my best shot at what you've asked for:
jo busybox # echo 'echo $PATH;uname' | strace -f -- sh -c
"(PATH=/bin:/usr/bin /usr/bin/chroot . bin/busybox ash)"
execve("/bin/sh", ["sh", "-c", "(PATH=/bin:/usr/bin /usr/bin/chr"...],
[/* 41 vars */]) = 0
brk(0) = 0x6ef000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7f3f78950000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=231054, ...}) = 0
mmap(NULL, 231054, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f3f78917000
close(3) = 0
open("/lib64/libncurses.so.5", O_RDONLY) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240S\1\0\0\0\0\0"...,
832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=350136, ...}) = 0
mmap(NULL, 2447360, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0x7f3f784db000
mprotect(0x7f3f7852b000, 2097152, PROT_NONE) = 0
mmap(0x7f3f7872b000, 20480, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x50000) = 0x7f3f7872b000
mmap(0x7f3f78730000, 2048, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3f78730000
close(3) = 0
open("/lib64/libdl.so.2", O_RDONLY) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\17\0\0\0\0\0\0"...,
832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=14696, ...}) = 0
mmap(NULL, 2109704, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0x7f3f782d7000
mprotect(0x7f3f782d9000, 2097152, PROT_NONE) = 0
mmap(0x7f3f784d9000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f3f784d9000
close(3) = 0
open("/lib64/libc.so.6", O_RDONLY) = 3
read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`#\2\0\0\0\0\0"..., 832)
= 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1628104, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7f3f78916000
mmap(NULL, 3742680, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0x7f3f77f45000
mprotect(0x7f3f780ce000, 2093056, PROT_NONE) = 0
mmap(0x7f3f782cd000, 20480, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x188000) = 0x7f3f782cd000
mmap(0x7f3f782d2000, 19416, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3f782d2000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7f3f78915000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7f3f78914000
arch_prctl(ARCH_SET_FS, 0x7f3f78915700) = 0
mprotect(0x7f3f782cd000, 16384, PROT_READ) = 0
mprotect(0x7f3f784d9000, 4096, PROT_READ) = 0
mprotect(0x7f3f7872b000, 16384, PROT_READ) = 0
mprotect(0x6df000, 4096, PROT_READ) = 0
mprotect(0x7f3f78951000, 4096, PROT_READ) = 0
munmap(0x7f3f78917000, 231054) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
open("/dev/tty", O_RDWR|O_NONBLOCK) = 3
close(3) = 0
brk(0) = 0x6ef000
brk(0x710000) = 0x710000
getuid() = 0
getgid() = 0
geteuid() = 0
getegid() = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
open("/proc/meminfo", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0x7f3f7894f000
read(3, "MemTotal: 49556932 kB\nMemF"..., 1024) = 1024
close(3) = 0
munmap(0x7f3f7894f000, 4096) = 0
rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER|SA_RESTART,
0x7f3f77f7ad10}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER|SA_RESTART,
0x7f3f77f7ad10}, {SIG_DFL, [], SA_RESTORER|SA_RESTART, 0x7f3f77f7ad10},
8) = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10},
{SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10},
{SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10},
{SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10},
{SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10}, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN, [], SA_RESTORER, 0x7f3f77f7ad10},
{SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10}, 8) = 0
uname({sys="Linux", node="jo", ...}) = 0
stat("/home/eo/busybox", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
stat(".", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
getpid() = 22122
getppid() = 22119
stat(".", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
stat("/sbin/sh", 0x7fff8e23f520) = -1 ENOENT (No such file or
directory)
stat("/bin/sh", {st_mode=S_IFREG|0755, st_size=954888, ...}) = 0
stat("/bin/sh", {st_mode=S_IFREG|0755, st_size=954888, ...}) = 0
geteuid() = 0
getegid() = 0
getuid() = 0
getgid() = 0
access("/bin/sh", X_OK) = 0
stat("/bin/sh", {st_mode=S_IFREG|0755, st_size=954888, ...}) = 0
geteuid() = 0
getegid() = 0
getuid() = 0
getgid() = 0
access("/bin/sh", R_OK) = 0
stat("/bin/sh", {st_mode=S_IFREG|0755, st_size=954888, ...}) = 0
stat("/bin/sh", {st_mode=S_IFREG|0755, st_size=954888, ...}) = 0
geteuid() = 0
getegid() = 0
getuid() = 0
getgid() = 0
access("/bin/sh", X_OK) = 0
stat("/bin/sh", {st_mode=S_IFREG|0755, st_size=954888, ...}) = 0
geteuid() = 0
getegid() = 0
getuid() = 0
getgid() = 0
access("/bin/sh", R_OK) = 0
getpgrp() = 22118
rt_sigaction(SIGCHLD, {0x4436c0, [], SA_RESTORER|SA_RESTART,
0x7f3f77f7ad10}, {SIG_DFL, [], SA_RESTORER|SA_RESTART, 0x7f3f77f7ad10},
8) = 0
getrlimit(RLIMIT_NPROC, {rlim_cur=386504, rlim_max=386504}) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0
clone(Process 22123 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x7f3f789159d0) = 22123
[pid 22122] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 22123] rt_sigprocmask(SIG_SETMASK, [], <unfinished ...>
[pid 22122] rt_sigprocmask(SIG_BLOCK, [CHLD], <unfinished ...>
[pid 22123] <... rt_sigprocmask resumed> NULL, 8) = 0
[pid 22122] <... rt_sigprocmask resumed> [], 8) = 0
[pid 22123] rt_sigaction(SIGTSTP, {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, <unfinished ...>
[pid 22122] rt_sigprocmask(SIG_SETMASK, [], <unfinished ...>
[pid 22123] <... rt_sigaction resumed> {SIG_DFL, [], 0}, 8) = 0
[pid 22122] <... rt_sigprocmask resumed> NULL, 8) = 0
[pid 22123] rt_sigaction(SIGTTIN, {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, <unfinished ...>
[pid 22122] rt_sigprocmask(SIG_BLOCK, [CHLD], <unfinished ...>
[pid 22123] <... rt_sigaction resumed> {SIG_DFL, [], 0}, 8) = 0
[pid 22122] <... rt_sigprocmask resumed> [], 8) = 0
[pid 22123] rt_sigaction(SIGTTOU, {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, <unfinished ...>
[pid 22122] rt_sigaction(SIGINT, {0x4415e0, [], SA_RESTORER,
0x7f3f77f7ad10}, <unfinished ...>
[pid 22123] <... rt_sigaction resumed> {SIG_DFL, [], 0}, 8) = 0
[pid 22122] <... rt_sigaction resumed> {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, 8) = 0
[pid 22123] rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, <unfinished ...>
[pid 22122] wait4(-1, Process 22122 suspended
<unfinished ...>
[pid 22123] <... rt_sigaction resumed> {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, 8) = 0
[pid 22123] rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, {SIG_IGN, [], SA_RESTORER, 0x7f3f77f7ad10}, 8) = 0
[pid 22123] rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER|SA_RESTART,
0x7f3f77f7ad10}, {0x4436c0, [], SA_RESTORER|SA_RESTART, 0x7f3f77f7ad10},
8) = 0
[pid 22123] rt_sigaction(SIGCHLD, {0x4436c0, [], SA_RESTORER|SA_RESTART,
0x7f3f77f7ad10}, {SIG_DFL, [], SA_RESTORER|SA_RESTART, 0x7f3f77f7ad10},
8) = 0
[pid 22123] rt_sigaction(SIGINT, {0x458f80, [], SA_RESTORER,
0x7f3f77f7ad10}, {SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10}, 8) = 0
[pid 22123] rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
[pid 22123] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 22123] rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
[pid 22123] rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, {0x458f80, [], SA_RESTORER, 0x7f3f77f7ad10}, 8) = 0
[pid 22123] rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER,
0x7f3f77f7ad10}, {SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10}, 8) = 0
[pid 22123] rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER|SA_RESTART,
0x7f3f77f7ad10}, {0x4436c0, [], SA_RESTORER|SA_RESTART, 0x7f3f77f7ad10},
8) = 0
[pid 22123] execve("/usr/bin/chroot", ["/usr/bin/chroot", ".",
"bin/busybox", "ash"], [/* 40 vars */]) = 0
[pid 22123] brk(0) = 0x608000
[pid 22123] mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f79f538d000
[pid 22123] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file
or directory)
[pid 22123] open("/etc/ld.so.cache", O_RDONLY) = 3
[pid 22123] fstat(3, {st_mode=S_IFREG|0644, st_size=231054, ...}) = 0
[pid 22123] mmap(NULL, 231054, PROT_READ, MAP_PRIVATE, 3, 0) =
0x7f79f5354000
[pid 22123] close(3) = 0
[pid 22123] open("/lib64/libc.so.6", O_RDONLY) = 3
[pid 22123] read(3,
"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`#\2\0\0\0\0\0"..., 832)
= 832
[pid 22123] fstat(3, {st_mode=S_IFREG|0755, st_size=1628104, ...}) = 0
[pid 22123] mmap(NULL, 3742680, PROT_READ|PROT_EXEC,
MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f79f4ddc000
[pid 22123] mprotect(0x7f79f4f65000, 2093056, PROT_NONE) = 0
[pid 22123] mmap(0x7f79f5164000, 20480, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x188000) = 0x7f79f5164000
[pid 22123] mmap(0x7f79f5169000, 19416, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f79f5169000
[pid 22123] close(3) = 0
[pid 22123] mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f79f5353000
[pid 22123] mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f79f5352000
[pid 22123] mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f79f5351000
[pid 22123] arch_prctl(ARCH_SET_FS, 0x7f79f5352700) = 0
[pid 22123] mprotect(0x7f79f5164000, 16384, PROT_READ) = 0
[pid 22123] mprotect(0x606000, 4096, PROT_READ) = 0
[pid 22123] mprotect(0x7f79f538e000, 4096, PROT_READ) = 0
[pid 22123] munmap(0x7f79f5354000, 231054) = 0
[pid 22123] brk(0) = 0x608000
[pid 22123] brk(0x629000) = 0x629000
[pid 22123] chroot(".") = 0
[pid 22123] chdir("/") = 0
[pid 22123] execve("bin/busybox", ["bin/busybox", "ash"], [/* 40 vars
*/]) = 0
[pid 22123] uname({sys="Linux", node="jo", ...}) = 0
[pid 22123] brk(0) = 0x817000
[pid 22123] brk(0x8181a0) = 0x8181a0
[pid 22123] arch_prctl(ARCH_SET_FS, 0x817880) = 0
[pid 22123] brk(0x8391a0) = 0x8391a0
[pid 22123] brk(0x83a000) = 0x83a000
[pid 22123] getuid() = 0
[pid 22123] getpid() = 22123
[pid 22123] rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD],
SA_RESTORER|SA_RESTART, 0x419e90}, {SIG_DFL, [], 0}, 8) = 0
[pid 22123] rt_sigaction(SIGHUP, {SIG_DFL, [HUP],
SA_RESTORER|SA_RESTART, 0x419e90}, {SIG_DFL, [], 0}, 8) = 0
[pid 22123] getppid() = 22122
[pid 22123] stat("/home/eo/busybox", 0x7fff322f8290) = -1 ENOENT (No
such file or directory)
[pid 22123] getcwd("/", 4096) = 2
[pid 22123] ioctl(0, SNDCTL_TMR_TIMEBASE or
SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, 0x7fff322f8090) = -1 EINVAL
(Invalid argument)
[pid 22123] rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
[pid 22123] rt_sigaction(SIGINT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER,
0x419e90}, NULL, 8) = 0
[pid 22123] rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0
[pid 22123] rt_sigaction(SIGQUIT, {SIG_IGN, ~[RTMIN RT_1], SA_RESTORER,
0x419e90}, NULL, 8) = 0
[pid 22123] rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
[pid 22123] rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER,
0x419e90}, NULL, 8) = 0
[pid 22123] read(0, "echo $PATH;uname\n", 1023) = 17
[pid 22123] wait4(-1, 0x7fff322f7dcc, WNOHANG, NULL) = -1 ECHILD (No
child processes)
[pid 22123] write(1, "/bin:/usr/bin\n", 14/bin:/usr/bin
) = 14
[pid 22123] clone(Process 22124 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x817b50) = 22124
[pid 22123] wait4(-1, Process 22123 suspended
<unfinished ...>
[pid 22124] rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER,
0x419e90}, NULL, 8) = 0
[pid 22124] execve("/proc/self/exe", ["uname"], [/* 40 vars */]) = -1
ENOENT (No such file or directory)
[pid 22124] execve("uname", ["uname"], [/* 40 vars */]) = -1 ENOENT (No
such file or directory)
[pid 22124] write(2, "ash: ", 5ash: ) = 5
[pid 22124] write(2, "uname: not found", 16uname: not found) = 16
[pid 22124] write(2, "\n", 1
) = 1
[pid 22124] exit_group(127) = ?
Process 22123 resumed
Process 22124 detached
[pid 22123] <... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) ==
127}], 0, NULL) = 22124
[pid 22123] --- {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=22124,
si_status=127, si_utime=0, si_stime=0} (Child exited) ---
[pid 22123] read(0, "", 1023) = 0
[pid 22123] exit_group(127) = ?
Process 22122 resumed
Process 22123 detached
<... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 127}], 0, NULL)
= 22123
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=22123, si_status=127,
si_utime=0, si_stime=1} (Child exited) ---
wait4(-1, 0x7fff8e23f09c, WNOHANG, NULL) = -1 ECHILD (No child processes)
rt_sigreturn(0xffffffffffffffff) = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7f3f77f7ad10},
{0x4415e0, [], SA_RESTORER, 0x7f3f77f7ad10}, 8) = 0
exit_group(127) = ?
jo busybox #
You can see the $PATH was moved correctly into the busybox environment.
You can also see the execve() for /proc/self/exe failing, busybox tries
to execve() uname in the current dir only, but that also fails. A
little detail about the env I used for this:
jo busybox # ls -l strace bin/
-rwxr-x--- 1 eo eo 1124016 Dec 4 20:08 strace
bin/:
total 2120
-rwxrwx--x 1 eo eo 2165104 Dec 4 20:05 busybox
lrwxrwxrwx 1 eo eo 7 Dec 4 20:06 uname -> busybox
jo busybox # file strace
strace: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically
linked, for GNU/Linux 2.6.9, stripped
jo busybox #
Sources were the latest from git.
--Bart
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox