On Mon, Mar 9, 2015 at 5:49 AM, Borislav Petkov <bp@xxxxxxx> wrote: > I ended up committing this. Anything I've missed? > > --- > From: Yinghai Lu <yinghai@xxxxxxxxxx> > Date: Sat, 7 Mar 2015 14:07:15 -0800 > Subject: [PATCH] x86/setup: Use init_size instead of run_size > > Commit > > e6023367d779 ("x86, kaslr: Prevent .bss from overlaping initrd") > > introduced run_size for KASLR to represent the size of kernel proper > (vmlinux). > > However, we should use the actual runtime size (which provides for > copy/decompress), i.e. init_size, as it includes .bss and .brk. > > Why, you ask? > > Because init_size is the size needed for safe kernel decompression and > thus can be higher than run_size in case the decompressor needs a larger > buffer. > > From arch/x86/boot/header.S: > #define ZO_INIT_SIZE (ZO__end - ZO_startup_32 + ZO_z_extract_offset) > #define VO_INIT_SIZE (VO__end - VO__text) > #if ZO_INIT_SIZE > VO_INIT_SIZE > #define INIT_SIZE ZO_INIT_SIZE > #else > #define INIT_SIZE VO_INIT_SIZE > #endif > init_size: .long INIT_SIZE # kernel initialization size > > The boot loader allocates a buffer of size init_size which it > reads from the setup header and loads the compressed kernel > (arch/x86/boot/compressed/vmlinux) in it. > > init_size initially comes from the kernel proper's (vmlinux) init size. > It includes the .bss and .brk area. > > When the boot loader hands off to the compressed kernel, the last > moves itself to z_extract_offset within the buffer to make sure that > the decompressor output does not overwrite input data before it gets > consumed. > > However, z_extract_offset is the size difference > between the uncompressed and compressed kernel (see > arch/x86/boot/compressed/mkpiggy.c) and thus represents the additional > space needed for decompression but it doesn't factor in a bigger > ZO_INIT_SIZE. Can you put back: " So need to make sure [z_extra_offset, init_size) will fit ZO, that means init_size need to be adjusted according to ZO size. That make init_size is always >= run_size. " > > During ASLR buffer searching, we need to make sure the new buffer is big > enough for decompression. So use init_size instead, and kill run_size > related code. -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html