From 6558de636e9aba6d3d374a022c0c2371fbaa6d0e Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Mon, 15 Sep 2014 21:05:14 +0200 Subject: [PATCH] Fix tfork(2) not copying signal properties. --- kernel/process.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/kernel/process.cpp b/kernel/process.cpp index 8f9768e5..69fc0f8e 100644 --- a/kernel/process.cpp +++ b/kernel/process.cpp @@ -670,6 +670,20 @@ Process* Process::Fork() clone->cwd = cwd; kthread_mutex_unlock(&ptrlock); + kthread_mutex_lock(&idlock); + clone->uid = uid; + clone->gid = gid; + clone->euid = euid; + clone->egid = egid; + clone->umask = umask; + kthread_mutex_unlock(&idlock); + + kthread_mutex_lock(&signal_lock); + memcpy(&clone->signal_actions, &signal_actions, sizeof(signal_actions)); + sigemptyset(&clone->signal_pending); + clone->sigreturn = sigreturn; + kthread_mutex_unlock(&signal_lock); + // Initialize things that can fail and abort if needed. bool failure = false; @@ -681,14 +695,6 @@ Process* Process::Fork() clone->mtable = mtable; kthread_mutex_unlock(&ptrlock); - kthread_mutex_lock(&idlock); - clone->uid = uid; - clone->gid = gid; - clone->euid = euid; - clone->egid = egid; - clone->umask = umask; - kthread_mutex_unlock(&idlock); - if ( !(clone->program_image_path = String::Clone(program_image_path)) ) failure = false;