public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] x86-64: Stack alignment in _dl_tlsdesc_dynamic and red zone usage (bug 31501)
@ 2024-03-16 14:32 Florian Weimer
  2024-03-16 14:37 ` H.J. Lu
  0 siblings, 1 reply; 15+ messages in thread
From: Florian Weimer @ 2024-03-16 14:32 UTC (permalink / raw)
  To: libc-alpha

In sysdeps/x86_64/dl-tlsdesc-dynamic.h, the stack pointer is
realigned for some variants (notably _dl_tlsdesc_dynamic_xsavec).
This realignment does not take into account that the function has
already used part of the red zone at this point, thus clobbering
the initally saved register values located there if the stack
alignment inherited from the caller is unfortunate.

(Note: I do not know to write a good test case for this in the existing
framework.  We saw this as a random LTO plugin crash when building GCC
with -mtls-dialect=gnu2.  The existing tests on pass on x86_64-linux-gnu
with this change here.)

---
 sysdeps/x86_64/dl-tlsdesc-dynamic.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/sysdeps/x86_64/dl-tlsdesc-dynamic.h b/sysdeps/x86_64/dl-tlsdesc-dynamic.h
index 9f02cfc3eb..8e49e7eece 100644
--- a/sysdeps/x86_64/dl-tlsdesc-dynamic.h
+++ b/sysdeps/x86_64/dl-tlsdesc-dynamic.h
@@ -83,6 +83,8 @@ _dl_tlsdesc_dynamic:
 2:
 #if DL_RUNTIME_RESOLVE_REALIGN_STACK
 	movq	%rbx, -24(%rsp)
+	subq    $24, %rsp
+	cfi_adjust_cfa_offset(24)
 	mov	%RSP_LP, %RBX_LP
 	cfi_def_cfa_register(%rbx)
 	and	$-STATE_SAVE_ALIGNMENT, %RSP_LP
@@ -153,6 +155,8 @@ _dl_tlsdesc_dynamic:
 #if DL_RUNTIME_RESOLVE_REALIGN_STACK
 	mov	%RBX_LP, %RSP_LP
 	cfi_def_cfa_register(%rsp)
+	addq    $24, %rsp
+	cfi_adjust_cfa_offset(-24)
 	movq	-24(%rsp), %rbx
 	cfi_restore(%rbx)
 #else

base-commit: 5ebc24f785dc0dff494a93ca82a369497c3cdc68


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-03-17  3:15 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-16 14:32 [PATCH] x86-64: Stack alignment in _dl_tlsdesc_dynamic and red zone usage (bug 31501) Florian Weimer
2024-03-16 14:37 ` H.J. Lu
2024-03-16 14:43   ` H.J. Lu
2024-03-16 14:47     ` H.J. Lu
2024-03-16 15:04       ` Florian Weimer
2024-03-16 15:18         ` H.J. Lu
2024-03-16 16:32           ` H.J. Lu
2024-03-16 16:37             ` H.J. Lu
2024-03-16 17:42             ` Florian Weimer
2024-03-16 17:51               ` H.J. Lu
2024-03-16 22:05                 ` H.J. Lu
2024-03-17  1:19                   ` H.J. Lu
2024-03-17  3:14                     ` H.J. Lu
2024-03-16 14:57     ` Florian Weimer
2024-03-16 14:59       ` H.J. Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).