Implement startup smashing in C. The code should be moved
authorvisa <visa@openbsd.org>
Tue, 6 Jun 2017 14:35:53 +0000 (14:35 +0000)
committervisa <visa@openbsd.org>
Tue, 6 Jun 2017 14:35:53 +0000 (14:35 +0000)
under arch/mips64 once loongson and sgi have gap.o.

Discussed with deraadt@

sys/arch/octeon/octeon/autoconf.c
sys/arch/octeon/octeon/locore.S

index eb9fd9b..0adad7e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: autoconf.c,v 1.10 2017/04/22 12:34:44 visa Exp $      */
+/*     $OpenBSD: autoconf.c,v 1.11 2017/06/06 14:35:53 visa Exp $      */
 /*
  * Copyright (c) 2009 Miodrag Vallat.
  *
@@ -32,6 +32,17 @@ char    bootdev[16];
 enum devclass bootdev_class = DV_DULL;
 extern char uboot_rootdev[];
 
+void
+unmap_startup(void)
+{
+       extern uint32_t kernel_text[], endboot[];
+       uint32_t *word = kernel_text;
+
+       /* Cannot unmap KSEG0; smash with trap. */
+       while (word < endboot)
+               *word++ = 0x00000034u;  /* TEQ zero, zero */
+}
+
 void
 cpu_configure(void)
 {
@@ -40,6 +51,8 @@ cpu_configure(void)
        softintr_init();
        (void)config_rootfound("mainbus", NULL);
 
+       unmap_startup();
+
        splinit();
        cold = 0;
 }
index 579a2eb..1755759 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: locore.S,v 1.13 2017/06/05 15:23:11 visa Exp $ */
+/*     $OpenBSD: locore.S,v 1.14 2017/06/06 14:35:53 visa Exp $ */
 
 /*
  * Copyright (c) 2001-2004 Opsycon AB  (www.opsycon.se / www.opsycon.com)
@@ -121,17 +121,6 @@ locore_start:
        blt     t0, t1, 1b
        sd      v0, -8(t0)                      # store to randomdata
 
-       /*
-        * Smash the very early boot code by overwriting it.
-        */
-       li      v0, 0x00000034                  # TEQ zero, zero
-       LA      t0, start
-       LA      t1, endboot
-1:
-       daddu   t0, t0, 4
-       blt     t0, t1, 1b
-       sw      v0, -4(t0)
-
        /*
         * Initialize stack and call machine startup.
         */