From: Vladimir Serbinenko Date: Mon, 6 Feb 2017 23:42:43 +0000 (+0100) Subject: xen: Fix handling of GRUB chainloading. X-Git-Tag: 2.02-rc2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a96fc409373fffda99e18a8438ddfc6bb787bc8;p=thirdparty%2Fgrub.git xen: Fix handling of GRUB chainloading. In case of GRUB we put remapper after domain pages and not at 0x0. In this case we use max_addr to put remapper. Unfortunately we increment max_addr as well in this case resulting in virt mapping mapping page at old max_addr and trying to boot using new max_addr. Closes 46014. --- diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c index 51d1ddd37..3073f64d5 100644 --- a/grub-core/loader/i386/xen.c +++ b/grub-core/loader/i386/xen.c @@ -419,8 +419,6 @@ grub_xen_pt_alloc (void) try_virt_end = ALIGN_UP (xen_state.xen_inf.virt_base + page2offset (nr_need_pages) + ADDITIONAL_SIZE + STACK_SIZE, ALIGN_SIZE); - if (!xen_state.xen_inf.virt_base) - try_virt_end += PAGE_SIZE; err = get_pgtable_size (xen_state.xen_inf.virt_base, try_virt_end, nr_info_pages); @@ -433,7 +431,7 @@ grub_xen_pt_alloc (void) if (xen_state.xen_inf.virt_base) err = get_pgtable_size (0, PAGE_SIZE, nr_need_pages); else - err = get_pgtable_size (try_virt_end - PAGE_SIZE, try_virt_end, + err = get_pgtable_size (try_virt_end, try_virt_end + PAGE_SIZE, nr_need_pages); if (err) return err;