Commit 695dd0d6 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

signal/x86: In emulate_vsyscall force a signal instead of calling do_exit

Directly calling do_exit with a signal number has the problem that
all of the side effects of the signal don't happen, such as
killing all of the threads of a process instead of just the
calling thread.

So replace do_exit(SIGSYS) with force_fatal_sig(SIGSYS) which
causes the signal handling to take it's normal path and work
as expected.

Cc: Andy Lutomirski <luto@kernel.org>
Link: https://lkml.kernel.org/r/20211020174406.17889-17-ebiederm@xmission.com


Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 086ec444
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -226,7 +226,8 @@ bool emulate_vsyscall(unsigned long error_code,
	if ((!tmp && regs->orig_ax != syscall_nr) || regs->ip != address) {
		warn_bad_vsyscall(KERN_DEBUG, regs,
				  "seccomp tried to change syscall nr or ip");
		do_exit(SIGSYS);
		force_fatal_sig(SIGSYS);
		return true;
	}
	regs->orig_ax = -1;
	if (tmp)