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 | |
| 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')
| -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; |
