Split early startup code out of locore.S into locore0.S. Adjust link
authorderaadt <deraadt@openbsd.org>
Mon, 5 Jun 2017 18:59:06 +0000 (18:59 +0000)
committerderaadt <deraadt@openbsd.org>
Mon, 5 Jun 2017 18:59:06 +0000 (18:59 +0000)
commitc95c5e15e2c2a7450c7f3c2e612a1c21c5b21339
tree124f952ca3641d28fb890b8ab0393865adfc1a87
parente8c024338a3bb6434eec282875fee1890b7048a2
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.

The bootstrap code will need smashing because it is mapped by BLTB,
but this is a bit involved so not done yet.

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.  The only known offsets are in the startup code
(which will be gone when it is smashed).

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/hppa/conf/Makefile.hppa
sys/arch/hppa/conf/files.hppa
sys/arch/hppa/hppa/locore.S
sys/arch/hppa/hppa/locore0.S [new file with mode: 0644]