瀏覽代碼

linux-user: Move TARGET_SA_RESTORER out of generic/signal.h

SA_RESTORER and the associated sa_restorer field of struct sigaction are
an obsolete feature, not expected to be used by future architectures.
They are also absent on RISC-V, LoongArch, Hexagon and OpenRISC, but
defined due to their use of generic/signal.h.  This leads to corrupted
data and out-of-bounds accesses.

Move the definition of TARGET_SA_RESTORER out of generic/signal.h into the
target_signal.h files that need it.  Note that m68k has the sa_restorer
field, but does not use it and does not define SA_RESTORER.

Reported-by: Thomas Weißschuh <thomas@t-8ch.de>
Signed-off-by: Andreas Schwab <schwab@suse.de>
Reviewed-by: Thomas Weißschuh <thomas@t-8ch.de>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <mvmed060xc9.fsf@suse.de>
Andreas Schwab 6 月之前
父節點
當前提交
513823e752

+ 2 - 0
linux-user/aarch64/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 #define TARGET_SEGV_MTEAERR  8  /* Asynchronous ARM MTE error */
 #define TARGET_SEGV_MTEAERR  8  /* Asynchronous ARM MTE error */
 #define TARGET_SEGV_MTESERR  9  /* Synchronous ARM MTE exception */
 #define TARGET_SEGV_MTESERR  9  /* Synchronous ARM MTE exception */
 
 

+ 2 - 0
linux-user/arm/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 
 

+ 0 - 1
linux-user/generic/signal.h

@@ -15,7 +15,6 @@
 #define TARGET_SA_RESTART       0x10000000
 #define TARGET_SA_RESTART       0x10000000
 #define TARGET_SA_NODEFER       0x40000000
 #define TARGET_SA_NODEFER       0x40000000
 #define TARGET_SA_RESETHAND     0x80000000
 #define TARGET_SA_RESETHAND     0x80000000
-#define TARGET_SA_RESTORER      0x04000000
 
 
 #define TARGET_SIGHUP            1
 #define TARGET_SIGHUP            1
 #define TARGET_SIGINT            2
 #define TARGET_SIGINT            2

+ 2 - 0
linux-user/i386/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 
 

+ 1 - 0
linux-user/m68k/target_signal.h

@@ -3,6 +3,7 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_ARCH_HAS_SA_RESTORER 1
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 
 

+ 2 - 0
linux-user/microblaze/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 
 
 #endif /* MICROBLAZE_TARGET_SIGNAL_H */
 #endif /* MICROBLAZE_TARGET_SIGNAL_H */

+ 2 - 0
linux-user/ppc/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 #if !defined(TARGET_PPC64)
 #if !defined(TARGET_PPC64)
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #endif
 #endif

+ 2 - 0
linux-user/s390x/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 
 

+ 2 - 0
linux-user/sh4/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SETUP_FRAME
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 
 

+ 2 - 0
linux-user/x86_64/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 /* For x86_64, use of SA_RESTORER is mandatory. */
 /* For x86_64, use of SA_RESTORER is mandatory. */
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 0
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 0
 
 

+ 2 - 0
linux-user/xtensa/target_signal.h

@@ -3,6 +3,8 @@
 
 
 #include "../generic/signal.h"
 #include "../generic/signal.h"
 
 
+#define TARGET_SA_RESTORER      0x04000000
+
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 #define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
 
 
 #endif
 #endif