Split early startup code out of armv7_start.S into locore0.S. Adjust
authorpatrick <patrick@openbsd.org>
Wed, 14 Jun 2017 13:12:49 +0000 (13:12 +0000)
committerpatrick <patrick@openbsd.org>
Wed, 14 Jun 2017 13:12:49 +0000 (13:12 +0000)
commitbfb8ea58e3371e25437666d300d19af0bb1f5bbe
treee1060b3ef400106fdc3ea399e65c32438a67ff0a
parent6de096f4ddc9a84c336d08544468721bab5898ec
Split early startup code out of armv7_start.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.  Note that this commit does not yet unmap the early bootcode
since this is not as easy as on arm64.

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 has been unmapped.

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.

With guidance and ok deraadt@
sys/arch/armv7/armv7/armv7_start.S
sys/arch/armv7/armv7/locore0.S [new file with mode: 0644]
sys/arch/armv7/conf/Makefile.armv7
sys/arch/armv7/conf/files.armv7