Fix BZ #16634.
authorPaul Pluzhnikov <ppluzhnikov@google.com>
Mon, 24 Mar 2014 17:58:26 +0000 (10:58 -0700)
committerPaul Pluzhnikov <ppluzhnikov@google.com>
Mon, 24 Mar 2014 17:58:26 +0000 (10:58 -0700)
commita42faf59d6d9f82e5293a9ebcc26d9c9e562b12b
treea124669e62343e6b318af03c82a86a807773c334
parent509361270b4b889e991400a70eb87d45304c01cd
Fix BZ #16634.

An application that erroneously tries to repeatedly dlopen("a.out", ...)
may hit assertion failure:

  Inconsistency detected by ld.so: dl-tls.c: 474: _dl_allocate_tls_init:
  Assertion `listp != ((void *)0)' failed!

dlopen() actually fails with  "./a.out: cannot dynamically load executable",
but it does so after incrementing dl_tls_max_dtv_idx.

Once we run out of TLS_SLOTINFO_SURPLUS (62), we exit with above assertion
failure.

2014-03-24  Paul Pluzhnikov  <ppluzhnikov@google.com>

[BZ #16634]

* elf/dl-load.c (open_verify): Add mode parameter.
        Error early when ET_EXEC and mode does not have __RTLD_OPENEXEC.
        (open_path): Change from boolean 'secure' to complete flag 'mode'
        (_dl_map_object): Adjust.
* elf/Makefile (tests): Add tst-dlopen-aout.
* elf/tst-dlopen-aout.c: New test.
ChangeLog
NEWS
elf/Makefile
elf/dl-load.c
elf/tst-dlopen-aout.c [new file with mode: 0644]