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

Commit 00cbf608 authored by Al Viro's avatar Al Viro Committed by Linus Torvalds
Browse files

mn10300: prevent double syscall restarts



set ->orig_d0 to -1, same as what sigreturn does

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e46924d2
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -432,6 +432,12 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
	return -EFAULT;
}

static inline void stepback(struct pt_regs *regs)
{
	regs->pc -= 2;
	regs->orig_d0 = -1;
}

/*
 * handle the actual delivery of a signal to userspace
 */
@@ -459,7 +465,7 @@ static int handle_signal(int sig,
			/* fallthrough */
		case -ERESTARTNOINTR:
			regs->d0 = regs->orig_d0;
			regs->pc -= 2;
			stepback(regs);
		}
	}

@@ -527,12 +533,12 @@ static void do_signal(struct pt_regs *regs)
		case -ERESTARTSYS:
		case -ERESTARTNOINTR:
			regs->d0 = regs->orig_d0;
			regs->pc -= 2;
			stepback(regs);
			break;

		case -ERESTART_RESTARTBLOCK:
			regs->d0 = __NR_restart_syscall;
			regs->pc -= 2;
			stepback(regs);
			break;
		}
	}