CVSROOT: /cvs Module name: src Changes by: patr...@cvs.openbsd.org 2017/06/14 07:12:49
Modified files: sys/arch/armv7/armv7: armv7_start.S sys/arch/armv7/conf: Makefile.armv7 files.armv7 Added files: sys/arch/armv7/armv7: locore0.S Log message: 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@