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.
The master branch has been updated by Florian Weimer <email address hidden>:
https:/ /sourceware. org/git/ gitweb. cgi?p=glibc. git;h=f63b73814 f74032c0e5d0a83 300e3d864ef905e 5
commit f63b73814f74032 c0e5d0a83300e3d 864ef905e5
Author: Florian Weimer <email address hidden>
Date: Wed Nov 13 15:44:56 2019 +0100
Remove all loaded objects if dlopen fails, ignoring NODELETE [BZ #20839]
This introduces a “pending NODELETE” state in the link map, which is nodelete. During initial relocation, symbol binding
flipped to the persistent NODELETE state late in dlopen, via
activate_
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: Ib2a3d86af6f92d 75baca65431d747 83ee0dbc292