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