sh: fix syscall_set_return_value()
PATCH 1/1 sh: fix syscall_set_return_value()
According to documentation in include/asm-generic/syscall.h, if error argument of syscall_set_return_value() is nonzero, it is a negated errno.
This change fixes syscall_set_return_value() implementation on sh to match its own syscall_get_error(), the documentation, and other architectures where error argument of syscall_set_return_value() is non-positive.
Fixes fb4f87a2f048b ("sh: Provide the asm/syscall.h interface, needed by tracehook.")
Fixes 94e2fb3d3e1f4 ("sh: Provide asm/syscall.h for SH-5.")
Cc [email protected] # v2.6.28+
Signed-off-by Dmitry V. Levin <[email protected]>
--- arch/sh/include/asm/syscall_32.h | 5 +---- arch/sh/include/asm/syscall_64.h | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-)
arch/sh/include/asm/syscall_32.h +1 -4
@@ -40,10 +40,7 @@ static inline void syscall_set_return_value(struct task_struct *task,struct pt_regs *regs, int error, long val) { - if (error) - regs->regs[0] = -error; - else - regs->regs[0] = val; + regs->regs[0] = error ?: val; } static inline void syscall_get_arguments(struct task_struct *task,
arch/sh/include/asm/syscall_64.h +1 -4
@@ -39,10 +39,7 @@ static inline void syscall_set_return_value(struct task_struct *task,struct pt_regs *regs, int error, long val) { - if (error) - regs->regs[9] = -error; - else - regs->regs[9] = val; + regs->regs[9] = error ?: val; } static inline void syscall_get_arguments(struct task_struct *task,
Signature · 1 line
ldv