Commit 46138329 authored by Kees Cook's avatar Kees Cook

selftests/seccomp: powerpc: Fix seccomp return value testing

On powerpc, the errno is not inverted, and depends on ccr.so being
set. Add this to a powerpc definition of SYSCALL_RET_SET().
Co-developed-by: default avatarThadeu Lima de Souza Cascardo <cascardo@canonical.com>
Signed-off-by: default avatarThadeu Lima de Souza Cascardo <cascardo@canonical.com>
Link: https://lore.kernel.org/linux-kselftest/20200911181012.171027-1-cascardo@canonical.com/
Fixes: 5d83c2b3 ("selftests/seccomp: Add powerpc support")
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/lkml/20200912110820.597135-13-keescook@chromium.orgReviewed-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent f04cf78b
...@@ -1750,6 +1750,21 @@ TEST_F(TRACE_poke, getpid_runs_normally) ...@@ -1750,6 +1750,21 @@ TEST_F(TRACE_poke, getpid_runs_normally)
# define ARCH_REGS struct pt_regs # define ARCH_REGS struct pt_regs
# define SYSCALL_NUM(_regs) (_regs).gpr[0] # define SYSCALL_NUM(_regs) (_regs).gpr[0]
# define SYSCALL_RET(_regs) (_regs).gpr[3] # define SYSCALL_RET(_regs) (_regs).gpr[3]
# define SYSCALL_RET_SET(_regs, _val) \
do { \
typeof(_val) _result = (_val); \
/* \
* A syscall error is signaled by CR0 SO bit \
* and the code is stored as a positive value. \
*/ \
if (_result < 0) { \
SYSCALL_RET(_regs) = -result; \
(_regs).ccr |= 0x10000000; \
} else { \
SYSCALL_RET(_regs) = result; \
(_regs).ccr &= ~0x10000000; \
} \
} while (0)
#elif defined(__s390__) #elif defined(__s390__)
# define ARCH_REGS s390_regs # define ARCH_REGS s390_regs
# define SYSCALL_NUM(_regs) (_regs).gprs[2] # define SYSCALL_NUM(_regs) (_regs).gprs[2]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment