Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b1a3702 authored by Michael Ellerman's avatar Michael Ellerman
Browse files

powerpc: Don't negate error in syscall_set_return_value()



Currently the only caller of syscall_set_return_value() is seccomp
filter, which is not enabled on powerpc.

This means we have not noticed that our implementation of
syscall_set_return_value() negates error, even though the value passed
in is already negative.

So remove the negation in syscall_set_return_value(), and expect the
caller to do it like all other implementations do.

Also add a comment about the ccr handling.

Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
parent 2923e6d5
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -44,9 +44,15 @@ static inline void syscall_set_return_value(struct task_struct *task,
					    struct pt_regs *regs,
					    int error, long val)
{
	/*
	 * In the general case it's not obvious that we must deal with CCR
	 * here, as the syscall exit path will also do that for us. However
	 * there are some places, eg. the signal code, which check ccr to
	 * decide if the value in r3 is actually an error.
	 */
	if (error) {
		regs->ccr |= 0x10000000L;
		regs->gpr[3] = -error;
		regs->gpr[3] = error;
	} else {
		regs->ccr &= ~0x10000000L;
		regs->gpr[3] = val;