Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
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.