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).
Derek
On Fri, Apr 17, 2009 at 8:14 PM, <[email protected]> wrote:
>
> Hello Derek,
>
> Derek Spadaro:
>> This has been narrowed down to a mmap issue when loading shared
>> libraries of the new root. First mmap of the read-execute section of
>> the file functions properly. Second mmap of the read-write section
>> reads bad data if it is not read before the file is closed. That is
>> to say, if the read-write section is read before closing the file the
>> data is always good from then on--which explains why busybox only
>> crashes once (the first time). Browsing CVS, v1.45 of f_op.c contains
>> the comment "copyup a file immidiately at being mmap()ed which was
>> opened with FMODE_WRITE flag"... I wonder could this be related at
>> all?
>
> I am not sure.
> If you have the strace log, please show me. I'd like to see which
> library was mmapped.
> And you are using f_op.c v1.60 actually, aren't you?
>
>
> J. R. Okajima
>
************************************ first time
****************************************
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", 0x7f8b3728) = -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 +++
************************************ second time
****************************************
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", 0x7ffd1728) = -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() = 462
--- SIGCHLD (Child exited) @ 0 (0) ---
exit(0) = ?
------------------------------------------------------------------------------
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