diff --git a/sys/arch/sparc/sparc/process_machdep.c b/sys/arch/sparc/sparc/process_machdep.c index 23d732219415..d9db825c2b57 100644 --- a/sys/arch/sparc/sparc/process_machdep.c +++ b/sys/arch/sparc/sparc/process_machdep.c @@ -122,6 +122,9 @@ process_write_regs(struct lwp *l, const struct reg *regs) { int psr = l->l_md.md_tf->tf_psr & ~PSR_ICC; + if (((regs->r_pc | regs->r_npc) & 0x03) != 0) + return EINVAL; + memcpy(l->l_md.md_tf, regs, sizeof(*regs)); l->l_md.md_tf->tf_psr = psr | (regs->r_psr & PSR_ICC); return 0; @@ -140,6 +143,9 @@ int process_set_pc(struct lwp *l, void *addr) { + if (((u_int)addr & 0x03) != 0) + return EINVAL; + l->l_md.md_tf->tf_pc = (u_int)addr; l->l_md.md_tf->tf_npc = (u_int)addr + 4; return 0;