Re: [PATCH] x86, boot: Allow 64bit EFI kernel to be loaded above 4G

From: Baoquan He
Date: Fri Feb 20 2015 - 04:29:26 EST


On 02/19/15 at 07:35pm, Yinghai Lu wrote:
> On Thu, Feb 19, 2015 at 6:13 PM, Baoquan He <bhe@xxxxxxxxxx> wrote:
> > On 02/18/15 at 11:47am, Yinghai Lu wrote:
> >
> > Kaslr need both virtual and physical address be randomized, otherwise
> > it doesn't make sense. Please check what hpa said about this issue:
> >
> > https://lkml.org/lkml/2014/10/13/350
> >
>
> If I read correctly, it could be separated. phy one could be on bootloader
> and virtual could be in kernel.

I think people want physical address randomization too. This is
what Vivek replied to hpa's comment:

https://lkml.org/lkml/2014/10/13/377

And after I posted the patchset handling randomization of virtual and
physical address separately, Kees Cook also think it makes sense:
http://www.gossamer-threads.com/lists/linux/kernel/2090014

>
> > And usually no bootloader often load kernel onto a random physical
> > address. Fow now we can often see kexec/kdump did this. I believe Kees
> > introduced kaslr to mainly solve security issue of normal kernel which
> > is not like kexec/kdump for testing or debugging. Randomizing physical
> > address makes sense for kaslr feature.
>
> I put some grub2 patches that extend grub2 to load kernel/initrd above
> 4G into github tree.
>
> https://github.com/yhlu/grub2.git
>
> main purpose for that feature is to handle initrd that bigger than 4G.
>
> or you can try you solution on system that have 64bit EFI support,
> then you will don't need to
> worry about set ident mapping even.

Actually kexec is a bootloader which can put kernel at any address. This
is done in user space program kexec-tools. However kexec-tools make
kernel jump from 64bit into 64bit directly, and has built ident mapping
of whole physical memory. I have tried this and it works. kexec is
mainly used for kernel developer, kaslr is meaningless for kexec.

However kaslr focus on normal kernel, and jump from 32bit to 64bit mode.
I can't figure out a way to work around this.

Now I just want to figure out what register setting cause GPF when
reload kernel above 4G in this jumping from 32bit to 64bit way.

>
> Thanks
>
> Yinghai
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/