Committed for glibc 2.32
commit
115bcf921a52005b89ff2859ccae4a8fc6d6deed
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Sat Jul 18 15:08:03 2020 +0200
hurd: Fix longjmp early in initialization
When e.g. an LD_PRELOAD fails, _dl_signal_exception/error longjmps, but TLS
is not initialized yet, let along signal state. We thus mustn't look at
them within __longjmp.
* sysdeps/mach/hurd/i386/____longjmp_chk.S,__longjmp.S: Check for
initialized value of %gs, and that sigstate is non-NULL.
Gbp-Pq: Topic hurd-i386
Gbp-Pq: Name git-fix-longjmp.diff
PTR_DEMANGLE (%ecx)
#endif
- movl %gs:SIGSTATE_OFFSET,%edi
+ movw %ds, %si
+ movw %gs, %di
+ cmpw %si, %di
+ jz .Lok /* TLS not initialized yet */
+
+ movl %gs:SIGSTATE_OFFSET, %edi
+ testl %edi, %edi
+ jz .Lok /* sigstate not initialized yet */
testl $SS_ONSTACK, (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)(%edi)
jnz .Lonstack
PTR_DEMANGLE (%ecx)
#endif
- movl %gs:SIGSTATE_OFFSET,%edi
+ movw %ds, %si
+ movw %gs, %di
+ cmpw %si, %di
+ jz .Lok /* TLS not initialized yet */
+
+ movl %gs:SIGSTATE_OFFSET, %edi
+ testl %edi, %edi
+ jz .Lok /* sigstate not initialized yet */
testl $SS_ONSTACK, (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)(%edi)
jz .Lok