summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorNiklas Hallqvist <niklas@cvs.openbsd.org>1996-05-04 13:29:05 +0000
committerNiklas Hallqvist <niklas@cvs.openbsd.org>1996-05-04 13:29:05 +0000
commit3ab190d9a07c7fc06e8f7d3f5a4aa7eb038b5a84 (patch)
treee4ea165bc638c9868abc8d9265f57980e2c50259 /sys/arch
parent8c720b68014fbb7277fc4d9ebdc15d8f4f7a7086 (diff)
From NetBSD:
Add a check in the kernel reload device (/dev/reload) to protect against the MMU switch code being in different locations between the running kernel and the new kernel. Returns ENODEV if the reload fails. Change the error return from EFAULT to ENOEXEC when kernel_reload gets a short write on the exec header.
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/amiga/amiga/locore.s18
1 files changed, 13 insertions, 5 deletions
diff --git a/sys/arch/amiga/amiga/locore.s b/sys/arch/amiga/amiga/locore.s
index 443b93fa089..42ecc146601 100644
--- a/sys/arch/amiga/amiga/locore.s
+++ b/sys/arch/amiga/amiga/locore.s
@@ -1,5 +1,5 @@
-/* $OpenBSD: locore.s,v 1.6 1996/05/02 06:43:18 niklas Exp $ */
-/* $NetBSD: locore.s,v 1.50 1996/04/21 21:07:04 veego Exp $ */
+/* $OpenBSD: locore.s,v 1.7 1996/05/04 13:29:04 niklas Exp $ */
+/* $NetBSD: locore.s,v 1.51 1996/05/02 02:08:33 mhitch Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -841,9 +841,9 @@ Lcacheon:
* Create a fake exception frame that returns to user mode,
* make space for the rest of a fake saved register set, and
* pass the first available RAM and a pointer to the register
- * set to "main()". "main()" will do an "execve()" using that
+ * set to "mi_main()". "mi_main()" will do an "execve()" using that
* stack frame.
- * When "main()" returns, we're running in process 1 and have
+ * When "mi_main()" returns, we're running in process 1 and have
* successfully executed the "execve()". We load up the registers from
* that set; the "rte" loads the PC and PSR, which jumps to "init".
*/
@@ -858,7 +858,7 @@ Lcacheon:
movl usp,a1
movl a1,sp@(FR_SP) | save user stack pointer in frame
pea sp@ | addr of space for D0
- jbsr _main | main(firstaddr, r0)
+ jbsr _mi_main | mi_main(firstaddr, r0)
addql #4,sp | pop args
cmpl #MMU_68040,_mmutype | 68040?
jne Lnoflush | no, skip
@@ -1842,6 +1842,14 @@ Ldoreset:
*/
.globl _kernel_reload
_kernel_reload:
+ lea Lreload_copy,a0 | cursory validity check of new kernel
+ movl a0@,d0 | to see if the kernel reload code
+ addl sp@(4),a0 | in new image matches running kernel
+ cmpl a0@,d0
+ jeq Lreload_ok
+ rts | It doesn't match - can't reload
+Lreload_ok:
+ jsr _bootsync
CUSTOMADDR(a5)
movew #(1<<9),a5@(0x096) | disable DMA (before clobbering chipmem)