|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] kexec and xen/arch/x86/boot/head.S trampoline
On Wed, Feb 28, 2018 at 03:07:41PM +0000, Andrew Cooper wrote:
> On 28/02/18 14:08, Trammell Hudson wrote:
> > kexec allocates a 1 page segment at 0x0 and memsets most of it to zero,
> > wiping out coreboot's EBDA structure, which xen's head.S consulted to
> > allocate the trampoline. Xen's code looks like this:
>
> This sounds like a bug as and of itself. I presume this is to do with
> IVT handling?
Maybe? That's the right address and it only populates 0x78 bytes
(in qemu) with contents, which would be about right for the interrupt
table. I haven't tracked down where that data comes from.
> [...]
> > Are there reasons to prefer EBDA over mbi->mem_lower?
>
> I think the expectation was that the EBDA would be more reliable than
> mbi->mem_lower. However, we recently hit a similar bug with PVH
> handling (c/s a232346b1fe), and these days, the EBDA is quite likely not
> to be present.
>
> I think we probably can use mbi->mem_lower (if available and sane) by
> default. If the bootloader has messed that up, all bets are off
> anyway. Irrespective, we should fix the EBDA lower sanity check.
What do you think of something like this instead?
/*
* If the multiboot structure memory limits are available,
* use it for the trampoline.
*/
testb $MBI_MEMLIMITS,(%ebx)
jz 1f /* not available? BDA value will be fine */
mov MB_mem_lower(%ebx),%ecx
cmp $0x100,%ecx /* is the multiboot value too small? */
jae 2f
1:
/* MBI not available, set up trampoline segment 64k below EBDA */
movzwl 0x40e,%ecx /* EBDA segment */
cmp $0xa000,%ecx /* sanity check (high) */
jae 0f
cmp $0x4000,%ecx /* sanity check (low) */
jae 2f
0:
movzwl 0x413,%ecx /* use base memory size on failure */
cmp $0xa000,%ecx /* sanity check (high) */
jae bad_ebda
cmp $0x4000,%ecx /* sanity check (low) */
jb bad_ebda
2: /* Reserve 64kb for the trampoline */
shl $10-4,%ecx /* convert to bytes */
sub $0x1000,%ecx
--
Trammell
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |