ref: 531a57fd800165e78cbf7b917e0d2b2ec5a5108a
parent: f9fd6981241f28f056efe9be8db4dfc39266bee4
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Mon Apr 14 12:35:47 EDT 2025
pc64: fix noted(NSAVE) check
--- a/sys/src/9/pc64/trap.c
+++ b/sys/src/9/pc64/trap.c
@@ -639,9 +639,8 @@
switch(arg0){
case NCONT:
case NRSTR:
-if(0) print("%s %lud: noted %#p %#p\n",
- up->text, up->pid, nureg->pc, nureg->sp);
- if(!okaddr(nureg->pc, 1, 0) || !okaddr(nureg->sp, BY2WD, 0)){
+if(0) print("%s %lud: noted %#p %#p\n", up->text, up->pid, ureg->pc, ureg->sp);
+ if(!okaddr(ureg->pc, 1, 0) || !okaddr(ureg->sp, BY2WD, 0)){
qunlock(&up->debug);
pprint("suicide: trap in noted\n");
pexit("Suicide", 0);
@@ -651,14 +650,13 @@
break;
case NSAVE:
- if(!okaddr(nureg->pc, 1, 0)
- || !okaddr(nureg->sp, BY2WD, 0)){
+ sp = oureg-4*BY2WD-ERRMAX;
+ if(!okaddr(ureg->pc, 1, 0) || !okaddr(sp, 4 * BY2WD, 1)){
qunlock(&up->debug);
pprint("suicide: trap in noted\n");
pexit("Suicide", 0);
}
qunlock(&up->debug);
- sp = oureg-4*BY2WD-ERRMAX;
ureg->sp = sp;
ureg->bp = oureg; /* arg 1 passed in RARG */
((uintptr*)sp)[1] = oureg; /* arg 1 0(FP) is ureg* */
--
⑨