ref: b96573b481440455ea92c67a0bc629b88901b319
parent: c309f466eff33a331f9a8d8c8b18cfe613c1d3f4
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu Mar 28 17:52:38 EDT 2024
kernel: zero up->ureg on sysexec() and pexit() The up->ureg pointer points to the last delivered note in the user-space stack. On exec(), all the notes are cleared and the ureg pointer should be zeroed as well as it points into the previous programs stack. Note, this can only happen if someone does exec() from a note handler. When we pexit(), also zero the up->ureg and up->dbgreg as we are about to release the memory segments and nobody should debugging user-space anymore.
--- a/sys/src/9/port/proc.c
+++ b/sys/src/9/port/proc.c
@@ -1348,6 +1348,8 @@
freenote(up->lastnote);
up->lastnote = nil;
up->notified = 0;
+ up->ureg = nil;
+ up->dbgreg = nil;
/* release debuggers */
if(up->pdbg != nil) {
--- a/sys/src/9/port/sysproc.c
+++ b/sys/src/9/port/sysproc.c
@@ -607,6 +607,7 @@
up->lastnote = nil;
up->notify = nil;
up->notified = 0;
+ up->ureg = nil;
up->privatemem = 0;
up->noswap = 0;
up->pcycles = -up->kentry;