[PATCH 1/8] elf: Propagate the pointer guard to ld.so loaded via static dlopen (BZ 34196)
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Tue Jun 30 19:56:30 GMT 2026
On 30/06/26 15:15, Sachin Monga wrote:
>
> On 03/06/26 5:34 am, Adhemerval Zanella wrote:
>> The static-dlopen does not initialize the pointer guard for ABIs that
>> define THREAD_SET_POINTER_GUARD. Besides not properly guard the
>> pointer if a libc.so symbol is called, this can leads to setjmp
>> failures (a jmp_buf set up by the loaded ibc.so.6 cannot be restored
>> by the static program's __longjmp, and vice versa).
>>
>> Seed the just-mapped loader's __pointer_chk_guard from the program's
>> __pointer_chk_guard_local in __rtld_static_init, next to the other
>> runtime values copied there.
>>
>> Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu.
>> ---
>> elf/Makefile | 6 +++
>> elf/rtld_static_init.c | 12 +++++
>> elf/tst-ptrguard-static-dlopen-mod.c | 29 +++++++++++
>> elf/tst-ptrguard-static-dlopen.c | 51 +++++++++++++++++++
>> .../tst-ptrguard-static-dlopen.script | 1 +
>> 5 files changed, 99 insertions(+)
>> create mode 100644 elf/tst-ptrguard-static-dlopen-mod.c
>> create mode 100644 elf/tst-ptrguard-static-dlopen.c
>> create mode 100644 elf/tst-ptrguard-static-dlopen.root/tst-ptrguard-static-dlopen.script
>>
> Hi Adhemerval
>
> /tst-ptrguard-static-dlopen/ FAILs on powerpc64le. It is the first test in both tests-static and tests-container, and the tests-container rule runs the (dynamically linked) support/test-container through
> $(test-via-rtld-prefix), which is empty for tests-static. The helper is thus bound to the system loader/libc instead of the build tree, and fails wherever the system glibc predates the build tree. On the system I was performing my execution, system installed glibc was 2.34 and hence I encountered this failure. :
>
> support/test-container: libc.so.6: version `GLIBC_2.38' not found before the test itself runs. Recent system glibc masks it, which is why it might have passed on other archs.
>
> Do you think this assessment is correct or I am missing something here ?
>
> Proposed Fix: add $(test-container-via-rtld-prefix) (= $(rtld-prefix), empty under build-hardcoded-path-in-tests) and use it in the tests-container rule.
> Identical to $(test-via-rtld-prefix) for existing dynamic container tests; only static ones change. I checked it on powerpc64le and x86_64.
>
> Given the freeze on the 4th, OK to post this for the release?
Yeah, we need to always run the test-container with the built glibc. I think
I haven't see it because I always build with $(build-hardcoded-path-in-tests),
so test-container contains the required DT_RPATH.
If you have a working patch please send it, I think we should fix it for
2.44.
More information about the Libc-alpha
mailing list