In-line.
On Mon, Apr 20, 2009 at 9:39 PM, <[email protected]> wrote:
>
> Derek Spadaro:
>> It is v1.60 of f_op.c. This happens whenever a shared library is
>> loaded for the first time (and is from then on OK). I have attached a
>> strace example (of first and second executions when a library was not
>> previously loaded).
>
> Thank you.
> While I don't know much about uClibc, is libc necessary too? Doesn't
> uClibc replace libc?
>
It does. In this system /lib/libc.so.0 is symbolically linked to uClibc.
lrwxrwxrwx 1 root root 19 Apr 22 2009 libc.so.0 ->
libuClibc-0.9.30.so
-rwxr-xr-x 1 root root 710040 Mar 23 2009 libuClibc-0.9.30.so
> And I want you to test these things.
> - Assuming your /sfs has all libraries and binaries, execute the command
> in squashfs.
> # mount -t squashfs -o loop,ro /mnt/squashfs /sfs
> # strace -fF chroot /sfs pdcpshim
This sequence executed fine.
>
> - execute the command in tmpfs.
> # mount -t tmpfs -o size=32M,nr_inodes=1k,mode=0700 tmpfs /rw
> # mount -t squashfs -o loop,ro /mnt/squashfs /sfs
> copy all necessary files from /sfs to /rw
> # cd /sfs
> # cp -p --parents /usr/occam/bin/pdcpshim \
> /etc/ld.so.cache /lib/libdaemon.so.1 /usr/lib/libdaemon.so.1 \
> /usr/occam/lib/libdaemon.so.1 /lib/libc.so.0 \
> /lib/ld-uClibc.so.0 \
> /rw
> # cd /
> # strace -fF chroot /rw pdcpshim
>
This executed fine.
> - execute the command in aufs after copying files.
> mount /rw, /sfs and aufs.
> # cd /newroot
> # touch /usr/occam/bin/pdcpshim \
> /etc/ld.so.cache /lib/libdaemon.so.1 /usr/lib/libdaemon.so.1 \
> /usr/occam/lib/libdaemon.so.1 /lib/libc.so.0 \
> /lib/ld-uClibc.so.0
> # strace pdcpshim
>
This worked fine after touching the application only. It fails if
that touch is omitted. Strace of the two cases is attached.
Derek
>
> J. R. Okajima
>
********************************* touch
************************************************
...
ont-linux: / # mkdir /rw
ont-linux: / # mount -t tmpfs -o size=16M,nr_inodes=1k,mode=0700 tmpfs /rw
ont-linux: / # mkdir /newroot
ont-linux: / # mount -t aufs -o dirs=/rw:/sfs=ro none /newroot
ont-linux: / # touch /newroot/usr/occam/bin/pdcpshim
ont-linux: / # strace -fF chroot /newroot pdcpshim
execve("/usr/sbin/chroot", ["chroot", "/newroot", "pdcpshim"], [/* 13 vars */])
= 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab2000
stat("/etc/ld.so.cache", 0x7f8a2718) = -1 ENOENT (No such file or directory)
open("/lib/libcrypt.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=17868, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\4\300\0\0\0004\0"...,
4096) = 4096
old_mmap(NULL, 155648, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aac3000
old_mmap(0x2aac3000, 16244, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) =
0x2aac3000
old_mmap(0x2aad7000, 72, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x4000) = 0x2aad7000
old_mmap(0x2aad8000, 66336, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2aad8000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libm.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=165320, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\25p\0\0\0004\0"..., 4096)
= 4096
old_mmap(NULL, 225280, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aae9000
old_mmap(0x2aae9000, 155460, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0x2aae9000
old_mmap(0x2ab1f000, 472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x26000) = 0x2ab1f000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\253\200\0\0\0004\0"...,
4096) = 4096
old_mmap(NULL, 729088, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ab20000
old_mmap(0x2ab20000, 638128, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0x2ab20000
old_mmap(0x2abcb000, 8164, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x9b000) = 0x2abcb000
old_mmap(0x2abcd000, 19472, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2abcd000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
close(3) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
close(3) = 0
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=43176, ...}) = 0
mprotect(0x2abcb000, 4096, PROT_READ) = 0
mprotect(0x2aac1000, 4096, PROT_READ) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
getuid() = 0
chroot("/newroot") = 0
chdir("/") = 0
execve("/bin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = -1 ENOENT (No such
file or directory)
execve("/sbin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = -1 ENOENT (No such
file or directory)
execve("/usr/bin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = -1 ENOENT (No such
file or directory)
execve("/usr/sbin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = -1 ENOENT (No
such file or directory)
execve("/usr/occam/bin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab2000
stat("/etc/ld.so.cache", 0x7fabf728) = -1 ENOENT (No such file or directory)
open("/lib/libdaemon.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/libdaemon.so.1", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/usr/occam/lib/libdaemon.so.1", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=15848, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\16\360\0\0\0004\0"...,
4096) = 4096
old_mmap(NULL, 81920, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aac3000
old_mmap(0x2aac3000, 13240, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) =
0x2aac3000
old_mmap(0x2aad6000, 1300, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x3000) = 0x2aad6000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\253\200\0\0\0004\0"...,
4096) = 4096
old_mmap(NULL, 729088, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aad7000
old_mmap(0x2aad7000, 638128, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0x2aad7000
old_mmap(0x2ab82000, 8164, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x9b000) = 0x2ab82000
old_mmap(0x2ab84000, 19472, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ab84000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
close(3) = 0
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=43176, ...}) = 0
mprotect(0x2ab82000, 4096, PROT_READ) = 0
mprotect(0x2aac1000, 4096, PROT_READ) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
fork(Process 610 attached
) = 610
[pid 609] --- SIGCHLD (Child exited) @ 0 (0) ---
[pid 609] exit(0) = ?
Process 610 detached
**************************** don't touch
************************************************
...
ont-linux: / # mkdir /rw
ont-linux: / # mount -t tmpfs -o size=16M,nr_inodes=1k,mode=0700 tmpfs /rw
ont-linux: / # mkdir /newroot
ont-linux: / # mount -t aufs -o dirs=/rw:/sfs=ro none /newroot
ont-linux: / # strace chroot /newroot pdcpshim
execve("/usr/sbin/chroot", ["chroot", "/newroot", "pdcpshim"], [/* 13 vars */])
= 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab2000
stat("/etc/ld.so.cache", 0x7fe37718) = -1 ENOENT (No such file or directory)
open("/lib/libcrypt.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=17868, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\4\300\0\0\0004\0"...,
4096) = 4096
old_mmap(NULL, 155648, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aac3000
old_mmap(0x2aac3000, 16244, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) =
0x2aac3000
old_mmap(0x2aad7000, 72, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x4000) = 0x2aad7000
old_mmap(0x2aad8000, 66336, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2aad8000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libm.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=165320, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\25p\0\0\0004\0"..., 4096)
= 4096
old_mmap(NULL, 225280, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aae9000
old_mmap(0x2aae9000, 155460, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0x2aae9000
old_mmap(0x2ab1f000, 472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x26000) = 0x2ab1f000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\253\200\0\0\0004\0"...,
4096) = 4096
old_mmap(NULL, 729088, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ab20000
old_mmap(0x2ab20000, 638128, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0x2ab20000
old_mmap(0x2abcb000, 8164, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x9b000) = 0x2abcb000
old_mmap(0x2abcd000, 19472, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2abcd000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
close(3) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
close(3) = 0
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=43176, ...}) = 0
mprotect(0x2abcb000, 4096, PROT_READ) = 0
mprotect(0x2aac1000, 4096, PROT_READ) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
getuid() = 0
chroot("/newroot") = 0
chdir("/") = 0
execve("/bin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = -1 ENOENT (No such
file or directory)
execve("/sbin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = -1 ENOENT (No such
file or directory)
execve("/usr/bin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = -1 ENOENT (No such
file or directory)
execve("/usr/sbin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = -1 ENOENT (No
such file or directory)
execve("/usr/occam/bin/pdcpshim", ["pdcpshim"], [/* 13 vars */]) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab2000
stat("/etc/ld.so.cache", 0x7fe26728) = -1 ENOENT (No such file or directory)
open("/lib/libdaemon.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/libdaemon.so.1", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/usr/occam/lib/libdaemon.so.1", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=15848, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\16\360\0\0\0004\0"...,
4096) = 4096
old_mmap(NULL, 81920, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aac3000
old_mmap(0x2aac3000, 13240, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) =
0x2aac3000
old_mmap(0x2aad6000, 1300, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x3000) = 0x2aad6000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x2aab3000
read(3,
"\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\10\0\0\0\1\0\0\253\200\0\0\0004\0"...,
4096) = 4096
old_mmap(NULL, 729088, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aad7000
old_mmap(0x2aad7000, 638128, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0)
= 0x2aad7000
old_mmap(0x2ab82000, 8164, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x9b000) = 0x2ab82000
old_mmap(0x2ab84000, 19472, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ab84000
close(3) = 0
munmap(0x2aab3000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=710040, ...}) = 0
close(3) = 0
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=43176, ...}) = 0
mprotect(0x2ab82000, 4096, PROT_READ) = 0
mprotect(0x2aac1000, 4096, PROT_READ) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today.
Use priority code J9JMT32. http://p.sf.net/sfu/p