From 3c8308533a05021a90e461630b0c2433179a7520 Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 30 Aug 2024 20:29:49 -0300 Subject: [PATCH] execve: keep ignored signals --- kernel-src/sys/syscalls/execve.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel-src/sys/syscalls/execve.c b/kernel-src/sys/syscalls/execve.c index f475ea30..07cb8966 100644 --- a/kernel-src/sys/syscalls/execve.c +++ b/kernel-src/sys/syscalls/execve.c @@ -284,7 +284,14 @@ static syscallret_t execve(context_t *context, char *upath, char *uargv[], char } memset(&_cpu()->thread->signals.stack, 0, sizeof(stack_t)); - memset(&proc->signals.actions[0], 0, sizeof(sigaction_t) * NSIG); + + // execve keeps information about ignored signals + for (int i = 0; i < NSIG; ++i) { + bool ign = proc->signals.actions[i].address == SIG_IGN; + memset(&proc->signals.actions[i], 0, sizeof(sigaction_t)); + if (ign) + proc->signals.actions[i].address = SIG_IGN; + } vmm_destroycontext(oldctx); CTX_SP(context) = (uint64_t)stack;