diff options
author | Rich Felker <dalias@aerifal.cx> | 2023-02-09 11:52:44 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2023-02-09 12:33:35 -0500 |
commit | 269d193820342dc109f39909d78fb30f4c978f76 (patch) | |
tree | 2acbae503e21dca93feb669b5d5a890ee915a797 /arch/microblaze | |
parent | ea3b40a321e751e016948087ef23ae7b9e8e0150 (diff) | |
download | musl-269d193820342dc109f39909d78fb30f4c978f76.tar.gz musl-269d193820342dc109f39909d78fb30f4c978f76.tar.xz musl-269d193820342dc109f39909d78fb30f4c978f76.zip |
fix wrong sigaction syscall ABI on mips*, or1k, microblaze, riscv64
we wrongly defined a dummy SA_RESTORER flag on these archs, despite the kernel interface not actually having such a feature. on archs which lack SA_RESTORER, the kernel sigaction structure also lacks the restorer function pointer member, which means the signal mask appears at a different offset. the kernel was thereby interpreting the bits of the code address as part of the signal set to be masked while handling the signal. this patch removes the erroneous SA_RESTORER definitions from archs which do not have it, makes access to the member conditional on whether SA_RESTORER is defined for the arch, and removes the now-unused asm for the affected archs. because there are reportedly versions of qemu-user which also use the wrong ABI here, the old ksigaction struct size is preserved with an unused member at the end. this is harmless and mitigates the risk of such a bug turning into a buffer overflow onto the sigaction function's stack.
Diffstat (limited to 'arch/microblaze')
-rw-r--r-- | arch/microblaze/bits/signal.h | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/arch/microblaze/bits/signal.h b/arch/microblaze/bits/signal.h index 490f83bf..f25b7c6a 100644 --- a/arch/microblaze/bits/signal.h +++ b/arch/microblaze/bits/signal.h @@ -46,7 +46,6 @@ typedef struct __ucontext { #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 -#define SA_RESTORER 0x04000000 #endif |