You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An executable is mapped into memory with a large unmapped hole in it
The dynamic linker loads libdl.so into that hole (due to rr chaos mode)
Something calls dlopen()
dlopen() calls dlopen_doit()
dlopen_doit() calls _dl_check_caller, where the caller pointer is some code in libdl.so
The first object encountered in the link map is the executable, whose address range contains libdl.so and therefore the caller pointer
That executable is not on the list of allowed caller libraries, so _dl_check_caller returns 1 to indicate that the caller is invalid.
dlopen() fails.
Fortunately this _dl_check_caller logic was removed in glibc 2.28. Unfortunately there are long-lived systems depending on glibc 2.27 that may not be upgraded for a long time.
The text was updated successfully, but these errors were encountered:
This can happen in glibc 2.27:
libdl.so
into that hole (due to rr chaos mode)dlopen()
dlopen()
callsdlopen_doit()
dlopen_doit()
calls _dl_check_caller, where thecaller
pointer is some code inlibdl.so
libdl.so
and therefore thecaller
pointer_dl_check_caller
returns 1 to indicate that the caller is invalid.dlopen()
fails.Fortunately this
_dl_check_caller
logic was removed in glibc 2.28. Unfortunately there are long-lived systems depending on glibc 2.27 that may not be upgraded for a long time.The text was updated successfully, but these errors were encountered: