[PATCH v8 3/6] Fix assert during static startup (BZ 33326)
Florian Weimer
fweimer@redhat.com
Fri Mar 20 11:08:23 GMT 2026
* Adhemerval Zanella:
> The BZ#33326 testcase triggers an assertion during process startup,
> which results in a segmentation fault instead of an error message
> and process termination with a SIGABRT. The assert issues
> __libc_message_impl, which in turn might call string functions
> depending on the ABI (strchrnul, strlen, memcpy/mempcpy), system
> calls (writev and mmap), and finally the abort call.
>
> Since each function may be called during process startup, before
> self-relocation and/or the thread pointer being set up, the
> functions should be built without stack protection.
>
> The dl-symbol-redir-ifunc.h is also expanded to cover
> strlen/memcpy/mempcpy/strchrnul on multiple architectures that implement
> ifunc.
>
> On i386, syscalls should not use the vDSO ("call *%gs:SYSINFO_OFFSET")
> during program statuup because thread pointer is not yet initialized. This
Typo: sta[r]tu[]p
Perhaps: becahse [the] thread pointer
> diff --git a/elf/Makefile b/elf/Makefile
> index 7f039b5563..29d771ef7a 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> +tests-special += \
> + $(objpfx)tst-assert-startup-static.out \
> + # tests-special
> +
Uhm, this doesn't seem to be in a region of the makefile that is
conditional on run-built-tests? So it would cause build-many-glibcs.py
failures?
> @@ -3532,7 +3537,6 @@ $(objpfx)tst-origin.out: tst-origin.sh $(objpfx)tst-origin
>
> $(objpfx)tst-dlopen-sgid.out: $(objpfx)tst-dlopen-sgid-mod.so
>
> -
> ifeq ($(run-built-tests),yes)
Spurious whitespace change.
> diff --git a/elf/tst-assert-startup-static.c b/elf/tst-assert-startup-static.c
> new file mode 100644
> index 0000000000..a3312cd9e5
> --- /dev/null
> +++ b/elf/tst-assert-startup-static.c
> +void __tunables_init (char **env)
> +{
> +/* The assert called by the loader/startup issues __libc_assert_fail instead
> + of __libc_assert, and __libc_assert_fail does issues the translation
> + routines (which would require additional handling to be called at this
Maybe: … instead of __[]assert[_fail], and __libc_assert_fail does [not]
perform [] translation[] (which …
Thanks,
Florian
More information about the Libc-alpha
mailing list