Re: [RFC PATCH] x86: Make sure verify_cpu has a good stack

From: Borislav Petkov
Date: Wed Mar 02 2016 - 17:10:08 EST


On Wed, Mar 02, 2016 at 01:54:50PM -0800, H. Peter Anvin wrote:
> A relocating bootloader is one that doesn't load the kernel at
> CONFIG_PHYSICAL_ADDRESS. The EFI stub is one example.
>
> __START_KERNEL_map is not relocated. On x86-64 we do relocation by
> pointing the page tables at a different address.
>
> So I really think we need this to be a leaq, so we take a nonstandard
> load address into consideration.

Hmm, but __START_KERNEL_map is a simple macro:

#define __START_KERNEL_map _AC(0xffffffff80000000, UL)

Ok, I think you want to do something like this for stack_start too:

/*
* Compute the delta between the address I am compiled to run at and the
* address I am actually running at.
*/
leaq _text(%rip), %rbp
subq $_text - __START_KERNEL_map, %rbp
...

in the normal case %rbp is 0, of course.

--
Regards/Gruss,
Boris.

ECO tip #101: Trim your mails when you reply.