Search $PATH failure?
Bart Kus
me at bartk.us
Mon Dec 5 04:22:36 UTC 2011
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
More information about the busybox
mailing list