Exception handling code on superH and m88k does not check for a valid
stack pointer, like other platforms do.

The following (mechanical) diff addresses the m88k case, and has been
tested to work on 88100 and 88110 processors.

Index: sys/arch/m88k/m88k/trap.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/m88k/m88k/trap.c,v
retrieving revision 1.107
diff -u -p -u -p -r1.107 trap.c
--- sys/arch/m88k/m88k/trap.c   8 Sep 2017 05:36:52 -0000       1.107
+++ sys/arch/m88k/m88k/trap.c   17 Jun 2019 17:54:48 -0000
@@ -239,6 +239,9 @@ m88100_trap(u_int type, struct trapframe
                type += T_USER;
                p->p_md.md_tf = frame;  /* for ptrace/signals */
                refreshcreds(p);
+               if (!uvm_map_inentry(p, &p->p_spinentry, PROC_STACK(p), "sp",
+                   uvm_map_inentry_sp, p->p_vmspace->vm_map.sserial))
+                       return;
        }
        fault_type = SI_NOINFO;
        fault_code = 0;
@@ -679,6 +682,9 @@ m88110_trap(u_int type, struct trapframe
                type += T_USER;
                p->p_md.md_tf = frame;  /* for ptrace/signals */
                refreshcreds(p);
+               if (!uvm_map_inentry(p, &p->p_spinentry, PROC_STACK(p), "sp",
+                   uvm_map_inentry_sp, p->p_vmspace->vm_map.sserial))
+                       return;
        }
 
        if (sig != 0)

Reply via email to