]> git.ipfire.org Git - thirdparty/glibc.git/commit
Remove all loaded objects if dlopen fails, ignoring NODELETE [BZ #20839]
authorFlorian Weimer <fweimer@redhat.com>
Wed, 13 Nov 2019 14:44:56 +0000 (15:44 +0100)
committerFlorian Weimer <fweimer@redhat.com>
Wed, 27 Nov 2019 19:55:35 +0000 (20:55 +0100)
commitf63b73814f74032c0e5d0a83300e3d864ef905e5
treedac6303d0f785a7103ede6546011bf430a42e236
parenta509eb117fac1d764b15eba64993f4bdb63d7f3c
Remove all loaded objects if dlopen fails, ignoring NODELETE [BZ #20839]

This introduces a “pending NODELETE” state in the link map, which is
flipped to the persistent NODELETE state late in dlopen, via
activate_nodelete.    During initial relocation, symbol binding
records pending NODELETE state only.  dlclose ignores pending NODELETE
state.  Taken together, this results that a partially completed dlopen
is rolled back completely because new NODELETE mappings are unloaded.

Tested on x86_64-linux-gnu and i386-linux-gnu.

Change-Id: Ib2a3d86af6f92d75baca65431d74783ee0dbc292
elf/Makefile
elf/dl-close.c
elf/dl-lookup.c
elf/dl-open.c
elf/get-dynamic-info.h
elf/tst-dlopenfail.c [new file with mode: 0644]
elf/tst-dlopenfaillinkmod.c [new file with mode: 0644]
elf/tst-dlopenfailmod1.c [new file with mode: 0644]
elf/tst-dlopenfailmod2.c [new file with mode: 0644]
include/link.h