diff options
author | Helge Deller <deller@gmx.de> | 2016-03-30 08:14:31 -0400 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2016-03-31 06:28:38 -0400 |
commit | 910cd32e552ea09caa89cdbe328e468979b030dd (patch) | |
tree | 02cc8c1d9d0202d76f988ae242ccbc328a8e43cd /arch/parisc/include/asm/syscall.h | |
parent | 4f4acc9472e54ce702f1d85fc9e6d57767dec91f (diff) |
parisc: Fix and enable seccomp filter support
The seccomp filter support requires careful handling of task registers. This
includes reloading of the return value (%r28) and proper syscall exit if
secure_computing() returned -1.
Additionally we need to sign-extend the syscall number from signed 32bit to
signed 64bit in do_syscall_trace_enter() since the ptrace interface only allows
storing 32bit values in compat mode.
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v4.5
Diffstat (limited to 'arch/parisc/include/asm/syscall.h')
-rw-r--r-- | arch/parisc/include/asm/syscall.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/parisc/include/asm/syscall.h b/arch/parisc/include/asm/syscall.h index a5eba95d87fe..637ce8d6f375 100644 --- a/arch/parisc/include/asm/syscall.h +++ b/arch/parisc/include/asm/syscall.h | |||
@@ -39,6 +39,19 @@ static inline void syscall_get_arguments(struct task_struct *tsk, | |||
39 | } | 39 | } |
40 | } | 40 | } |
41 | 41 | ||
42 | static inline void syscall_set_return_value(struct task_struct *task, | ||
43 | struct pt_regs *regs, | ||
44 | int error, long val) | ||
45 | { | ||
46 | regs->gr[28] = error ? error : val; | ||
47 | } | ||
48 | |||
49 | static inline void syscall_rollback(struct task_struct *task, | ||
50 | struct pt_regs *regs) | ||
51 | { | ||
52 | /* do nothing */ | ||
53 | } | ||
54 | |||
42 | static inline int syscall_get_arch(void) | 55 | static inline int syscall_get_arch(void) |
43 | { | 56 | { |
44 | int arch = AUDIT_ARCH_PARISC; | 57 | int arch = AUDIT_ARCH_PARISC; |