Skip to contentSkip to conversation

sh: fix syscall_set_return_value()

PATCH New Dmitry V. Levin 1 participant 1 message Dec 3, 2018 SuperH

lore
Share & tools
lore
#0 lore raw

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+
---
 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
index 6e118799831c..5d636a3593d1 100644
@@ -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
index 43882580c7f9..799fe72316e2 100644
@@ -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