[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