|
Message-ID: <20150920063909.GO12087@example.net> Date: Sun, 20 Sep 2015 08:39:09 +0200 From: u-wsnj@...ey.se To: musl@...ts.openwall.com Subject: pthread_getattr_np() vs explicit runtime loader Hello, musl 1.1.8 on ia32 Linux, building gcc 5.2.0 succeeds. Nevertheless a subset of the resulting executables segfault when run by an explicit loader (which is the vital mode of operation in our setups). They do not seem to segfault when using the implicit loader which suggests the result depends on the memory mapping layout. Moreover, the last syscalls seen before the crash are mremap(), presumably reflecting that pthread_getattr_np() is involved. It looks like (according to a discussion in mail archives) the logic in this function makes assumptions which not necessarily are true while using an explicit runtime loader. Would you comment on whether this guess is correct and hopefully make pthread_getattr_np() work even with the explicit loader? The strace examples limited to mremap() follow. The same files and libraries are being used, also the same loader path is used explicitly as embedded in the executable. ----------------------------------------------------------------- $ strace -e mremap \ /..../<loader> --library-path ...<libs> /..../jv-convert --help mremap(0xffffc000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffffb000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffffa000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff9000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff8000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff7000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff6000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff5000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff4000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff3000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff2000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff1000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff0000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffef000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffee000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffed000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffec000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffeb000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffea000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe9000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe8000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe7000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe6000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe5000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe4000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe3000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe2000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe1000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe0000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffdf000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffde000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffdd000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffdc000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffdb000, 4096, 8192, 0) = -1 EFAULT (Bad address) --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ Process 30289 detached ----------------------------------------------------------------- $ LD_LIBRARY_PATH=...<libs> strace -e mremap /..../jv-convert --help mremap(0xffffc000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffffb000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffffa000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff9000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff8000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff7000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff6000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff5000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff4000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff3000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff2000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff1000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xffff0000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffef000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffee000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffed000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffec000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffeb000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffea000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe9000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe8000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe7000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe6000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe5000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe4000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe3000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe2000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe1000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffe0000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffdf000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffde000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffdd000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffdc000, 4096, 8192, 0) = -1 ENOMEM (Cannot allocate memory) mremap(0xfffdb000, 4096, 8192, 0) = -1 EFAULT (Bad address) Usage: jv-convert [OPTIONS] [INPUTFILE [OUTPUTFILE]] Convert from one encoding to another. --encoding FROM --from FROM use FROM as source encoding name --to TO use TO as target encoding name -i FILE read from FILE -o FILE print output to FILE --reverse swap FROM and TO encodings --help print this help, then exit --version print version number, then exit `-' as a file name argument can be used to refer to stdin or stdout. Process 30291 detached ----------------------------------------------------------------- Regards, Rune
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.