]> xenbits.xensource.com Git - xen.git/commitdiff
x86/EFI: don't accept 64-bit base relocations on page tables
authorJan Beulich <jbeulich@suse.com>
Thu, 15 Sep 2016 08:06:56 +0000 (10:06 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 15 Sep 2016 08:06:56 +0000 (10:06 +0200)
Page tables get pre-populated with physical addresses which, due to
living inside the Xen image, will never exceed 32 bits in width. That
in turn results in the tool generating the relocations to produce
32-bit relocations for them instead of the 64-bit ones needed for
relocating virtual addresses. Hence instead of special casing page
tables in the processing of 64-bit relocations, let's be more rigid
and refuse them (as being indicative of something else having gone
wrong in the build process).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/efi/efi-boot.h

index 1098572176ca2028cdf0e021737629529a6636ee..388c4ea3323ee79338ff0eee57b7f1342d19f270 100644 (file)
@@ -81,12 +81,9 @@ static void __init efi_arch_relocate_image(unsigned long delta)
                 }
                 break;
             case PE_BASE_RELOC_DIR64:
-                if ( delta )
-                {
-                    *(u64 *)addr += delta;
-                    if ( in_page_tables(addr) )
-                        *(intpte_t *)addr += xen_phys_start;
-                }
+                if ( in_page_tables(addr) )
+                    blexit(L"Unexpected relocation type");
+                *(u64 *)addr += delta;
                 break;
             default:
                 blexit(L"Unsupported relocation type");