|
@@ -42,6 +42,7 @@
|
|
|
#include <asm/syscalls.h>
|
|
|
|
|
|
#include <asm/sigframe.h>
|
|
|
+#include <asm/signal.h>
|
|
|
|
|
|
#define COPY(x) do { \
|
|
|
get_user_ex(regs->x, &sc->x); \
|
|
@@ -547,7 +548,7 @@ static int x32_setup_rt_frame(struct ksignal *ksig,
|
|
|
return -EFAULT;
|
|
|
|
|
|
if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
|
|
|
- if (copy_siginfo_to_user32(&frame->info, &ksig->info))
|
|
|
+ if (__copy_siginfo_to_user32(&frame->info, &ksig->info, true))
|
|
|
return -EFAULT;
|
|
|
}
|
|
|
|
|
@@ -660,20 +661,21 @@ badframe:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static inline int is_ia32_compat_frame(void)
|
|
|
+static inline int is_ia32_compat_frame(struct ksignal *ksig)
|
|
|
{
|
|
|
return IS_ENABLED(CONFIG_IA32_EMULATION) &&
|
|
|
- test_thread_flag(TIF_IA32);
|
|
|
+ ksig->ka.sa.sa_flags & SA_IA32_ABI;
|
|
|
}
|
|
|
|
|
|
-static inline int is_ia32_frame(void)
|
|
|
+static inline int is_ia32_frame(struct ksignal *ksig)
|
|
|
{
|
|
|
- return IS_ENABLED(CONFIG_X86_32) || is_ia32_compat_frame();
|
|
|
+ return IS_ENABLED(CONFIG_X86_32) || is_ia32_compat_frame(ksig);
|
|
|
}
|
|
|
|
|
|
-static inline int is_x32_frame(void)
|
|
|
+static inline int is_x32_frame(struct ksignal *ksig)
|
|
|
{
|
|
|
- return IS_ENABLED(CONFIG_X86_X32_ABI) && test_thread_flag(TIF_X32);
|
|
|
+ return IS_ENABLED(CONFIG_X86_X32_ABI) &&
|
|
|
+ ksig->ka.sa.sa_flags & SA_X32_ABI;
|
|
|
}
|
|
|
|
|
|
static int
|
|
@@ -684,12 +686,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
|
|
|
compat_sigset_t *cset = (compat_sigset_t *) set;
|
|
|
|
|
|
/* Set up the stack frame */
|
|
|
- if (is_ia32_frame()) {
|
|
|
+ if (is_ia32_frame(ksig)) {
|
|
|
if (ksig->ka.sa.sa_flags & SA_SIGINFO)
|
|
|
return ia32_setup_rt_frame(usig, ksig, cset, regs);
|
|
|
else
|
|
|
return ia32_setup_frame(usig, ksig, cset, regs);
|
|
|
- } else if (is_x32_frame()) {
|
|
|
+ } else if (is_x32_frame(ksig)) {
|
|
|
return x32_setup_rt_frame(ksig, cset, regs);
|
|
|
} else {
|
|
|
return __setup_rt_frame(ksig->sig, ksig, set, regs);
|