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

Reply via email to