From: AKASHI Takahiro Date: Thu, 4 Sep 2014 14:48:01 +0000 (+0100) Subject: arm64: add SIGSYS siginfo for compat task X-Git-Tag: firefly_0821_release~4090^2~180 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=77227239d20ac6381fb1aee7b7cc902f0d14cd85;p=firefly-linux-kernel-4.4.55.git arm64: add SIGSYS siginfo for compat task Note: This patch is from v6 of Takahiro's proposed "arm64: add seccomp support" patchset (leecam@google.com) SIGSYS is primarily used in secure computing to notify tracer. This patch allows signal handler on compat task to get correct information with SA_SYSINFO specified when this signal is delivered. Signed-off-by: AKASHI Takahiro linaro.org> --- diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h index ae0004fe6c23..a79da08994f2 100644 --- a/arch/arm64/include/asm/compat.h +++ b/arch/arm64/include/asm/compat.h @@ -191,6 +191,13 @@ typedef struct compat_siginfo { compat_long_t _band; /* POLL_IN, POLL_OUT, POLL_MSG */ int _fd; } _sigpoll; + + /* SIGSYS */ + struct { + compat_uptr_t _call_addr; /* calling user insn */ + int _syscall; /* triggering system call number */ + unsigned int _arch; /* AUDIT_ARCH_* of syscall */ + } _sigsys; } _sifields; } compat_siginfo_t; diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c index b4692837e7ab..e1b8b9fb274e 100644 --- a/arch/arm64/kernel/signal32.c +++ b/arch/arm64/kernel/signal32.c @@ -211,6 +211,14 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) err |= __put_user(from->si_uid, &to->si_uid); err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, &to->si_ptr); break; +#ifdef __ARCH_SIGSYS + case __SI_SYS: + err |= __put_user((compat_uptr_t)(unsigned long) + from->si_call_addr, &to->si_call_addr); + err |= __put_user(from->si_syscall, &to->si_syscall); + err |= __put_user(from->si_arch, &to->si_arch); + break; +#endif default: /* this is just in case for now ... */ err |= __put_user(from->si_pid, &to->si_pid); err |= __put_user(from->si_uid, &to->si_uid);