Split early startup code out of locore.S into locore0.S. Adjust link
authorvisa <visa@openbsd.org>
Thu, 8 Jun 2017 11:47:24 +0000 (11:47 +0000)
committervisa <visa@openbsd.org>
Thu, 8 Jun 2017 11:47:24 +0000 (11:47 +0000)
commita6a40f7b8a0a2f6821bbe92b3c7ef0f679da1498
treedc4a5721ad669a71a5a344fa1b22c1f4e7788e68
parentd535b9ed60d5d0737cbae4a6a6fa998976eca4b7
Split early startup code out of locore.S into locore0.S.  Adjust link
run so that this locore0.o is always at the start of the executable.
But randomize the link order of all other .o files in the kernel, so
that their exec/rodata/data/bss segments land all over the place.

Late during kernel boot, smash the startup code with traps so that
it does not point to the other randomly placed code.  It has be smashed,
because sgi runs in the kseg0 or xkphys space.

As a result, the internal layout of every newly build bsd kernel is
different from past kernels.  Internal relative offsets are not known
to an outside attacker.

Ramdisk kernels cannot be compiled like this, because they are gzip'd.
When the internal pointer references change, the compression dictionary
bloats and results in poorer compression.
sys/arch/sgi/conf/Makefile.sgi
sys/arch/sgi/conf/files.sgi
sys/arch/sgi/sgi/autoconf.c
sys/arch/sgi/sgi/locore.S
sys/arch/sgi/sgi/locore0.S [new file with mode: 0644]