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

Commit 5a30a798 authored by Al Viro's avatar Al Viro
Browse files

um: wrong sigmask saved in case of multiple sigframes



we can't just find oldmask once; if there are multiple signals
and we loop building sigframes for those, ->saved_mask will be
definitely wrong for all but the first one.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d50349b0
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -74,15 +74,14 @@ static int kern_do_signal(struct pt_regs *regs)
{
	struct k_sigaction ka_copy;
	siginfo_t info;
	sigset_t *oldset;
	int sig, handled_sig = 0;

	while ((sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL)) > 0) {
		sigset_t *oldset;
		if (test_thread_flag(TIF_RESTORE_SIGMASK))
			oldset = &current->saved_sigmask;
		else
			oldset = &current->blocked;

	while ((sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL)) > 0) {
		handled_sig = 1;
		/* Whee!  Actually deliver the signal.  */
		if (!handle_signal(regs, sig, &ka_copy, &info, oldset)) {