From 969a3e599b260dd832ef0f45a5f22abfe246662d Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Mon, 6 Aug 2018 21:42:27 +0200 Subject: [PATCH] Fix signal dispatch if sigreturn is NULL. --- kernel/signal.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/kernel/signal.cpp b/kernel/signal.cpp index cbc0341c..010d8bf3 100644 --- a/kernel/signal.cpp +++ b/kernel/signal.cpp @@ -549,8 +549,6 @@ void Thread::HandleSignal(struct interrupt_context* intctx) ScopedLock lock(&process->signal_lock); - assert(process->sigreturn); - retry_another_signal: // Determine which signals are not blocked. @@ -613,8 +611,9 @@ retry_another_signal: assert(action->sa_handler != SIG_DFL || !sigismember(&default_ignored_signals, signum)); // The default action must be to terminate the process. Signals that are - // ignored by default got discarded earlier. - if ( action->sa_handler == SIG_DFL ) + // ignored by default got discarded earlier. If execve() failed, sigreturn + // may be NULL and the process isn't able to properly process signals. + if ( action->sa_handler == SIG_DFL || !process->sigreturn ) { kthread_mutex_unlock(&process->signal_lock); process->ExitThroughSignal(signum);