Re: [PATCH v2] x86/mm/KASLR: EFI region is mistakenly included into KASLR VA space for randomization

From: Ingo Molnar
Date: Fri Mar 24 2017 - 06:36:55 EST



* Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> wrote:

> No. It is the firmware's EFI code, and the virtual translation applied by the OS
> is made known to the firmware by means of a call into the runtime service
> SetVirtualAddressMap(). This service can only be called once after each boot,
> and so kexec kernels are forced to use the same VA mapping for runtime services
> as the first kernel. This is the whole point of having a VA region reserved for
> this, so that kexec kernels are guaranteed to be able to use the same VA
> mapping.

Yes, but it's the kernel's EFI code that determines the area! So my suggestion:

> > Preserving virtual addresses for kexec is a red herring: the randomized offset
> > could be passed to the kexec-ed kernel just fine.

Would solve the kexec problem, right?

I.e. the first kernel that boots randomizes the address range - and passes that
offset off to any subsequent kernels.

Turning KASLR off actively degrades that randomization of the kernel virtual
addresses.

Am I missing anything?

Thanks,

Ingo