Mitigation for "clone on sparc might fail with -EFAULT for no valid reason" (bz 31394)

It seems the kernel can not deal with uncommitted stack space in the area intended
for the register window when executing the clone() system call. So create a nested
frame (proxy for the kernel frame) and flush it from the processor to memory to
force committing pages to the stack before invoking the system call.

Bug: https://www.mail-archive.com/debian-glibc@lists.debian.org/msg62592.html
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31394
See-also: https://lore.kernel.org/sparclinux/62f9be9d-a086-4134-9a9f-5df8822708af@mkarcher.dialup.fu-berlin.de/
Signed-off-by: Michael Karcher <sourceware-bugzilla@mkarcher.dialup.fu-berlin.de>
Reviewed-by: DJ Delorie <dj@redhat.com>
This commit is contained in:
Michael Karcher 2024-07-28 15:30:57 +02:00 committed by Andreas K. Hüttel
parent aedbf08891
commit faeaa3bc9f
No known key found for this signature in database
GPG Key ID: DC2B16215ED5412A
2 changed files with 6 additions and 0 deletions

View File

@ -28,6 +28,9 @@
.text
ENTRY (__clone)
save %sp,-96,%sp
save %sp,-96,%sp
flushw
restore
cfi_def_cfa_register(%fp)
cfi_window_save
cfi_register(%o7, %i7)

View File

@ -32,6 +32,9 @@
ENTRY (__clone)
save %sp, -192, %sp
save %sp, -192, %sp
flushw
restore
cfi_def_cfa_register(%fp)
cfi_window_save
cfi_register(%o7, %i7)