[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] Revert "xen: arm: Update arm64 image header"



commit 3572f2fa7b0f6f20eb145bdccaf5888c76be8960
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Jun 29 19:13:20 2016 +0100
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Wed Jun 29 19:13:20 2016 +0100

    Revert "xen: arm: Update arm64 image header"
    
    This reverts commit 14eedf8e7169b05e383220b682656a449e5f1c08.
    
    This patch is breaking boot on any ARM64 platform (UEFI and bootwrapper).
    
    Requested-by: Julien Grall <julien.grall@xxxxxxx>
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
 xen/arch/arm/kernel.c | 43 ++++++++++++++++---------------------------
 1 file changed, 16 insertions(+), 27 deletions(-)

diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c
index 00be235..3f6cce3 100644
--- a/xen/arch/arm/kernel.c
+++ b/xen/arch/arm/kernel.c
@@ -29,7 +29,7 @@
 #define ZIMAGE32_MAGIC 0x016f2818
 
 #define ZIMAGE64_MAGIC_V0 0x14000008
-#define ZIMAGE64_MAGIC 0x644d5241 /* "ARM\x64" */
+#define ZIMAGE64_MAGIC_V1 0x644d5241 /* "ARM\x64" */
 
 struct minimal_dtb_header {
     uint32_t magic;
@@ -335,19 +335,17 @@ static int kernel_zimage64_probe(struct kernel_info *info,
 {
     /* linux/Documentation/arm64/booting.txt */
     struct {
-        union {
-                uint32_t code0;
-                uint32_t magic0; /* Old header magic */
-        };
-        uint32_t code1;
-        uint64_t text_offset;  /* Image load offset, little endian */
-        uint64_t image_size;   /* Effective Image size, little endian */
-        uint64_t flags;
+        uint32_t magic0;
+        uint32_t res0;
+        uint64_t text_offset;  /* Image load offset */
+        uint64_t res1;
         uint64_t res2;
+        /* zImage V1 only from here */
         uint64_t res3;
         uint64_t res4;
-        uint32_t magic;        /* Magic number, little endian, "ARM\x64" */
-        uint32_t res5;
+        uint64_t res5;
+        uint32_t magic1;
+        uint32_t res6;
     } zimage;
     uint64_t start, end;
 
@@ -356,29 +354,20 @@ static int kernel_zimage64_probe(struct kernel_info *info,
 
     copy_from_paddr(&zimage, addr, sizeof(zimage));
 
-    if ( zimage.magic != ZIMAGE64_MAGIC ) {
-        if ( zimage.magic0 == ZIMAGE64_MAGIC_V0 )
-             printk(XENLOG_ERR "No valid magic found in header! Kernel too 
old\n");
+    if ( zimage.magic0 != ZIMAGE64_MAGIC_V0 &&
+         zimage.magic1 != ZIMAGE64_MAGIC_V1 )
         return -EINVAL;
-    }
 
+    /* Currently there is no length in the header, so just use the size */
     start = 0;
+    end = size;
 
     /*
-     * Where image_size is non-zero image_size is little-endian
-     * and must be respected.
+     * Given the above this check is a bit pointless, but leave it
+     * here in case someone adds a length field in the future.
      */
-    if ( zimage.image_size )
-        end = zimage.image_size;
-    else
-        end = size;
-
-    if ( (end - start) > size ) {
-        printk(XENLOG_ERR "Error: Kernel Image size: %lu bytes > bootmodule 
size: %lu bytes\n",
-               zimage.image_size, (uint64_t)size);
-        printk(XENLOG_ERR "The field 'size' does not match the size of 
blob!\n");
+    if ( (end - start) > size )
         return -EINVAL;
-    }
 
     info->zimage.kernel_addr = addr;
     info->zimage.len = end - start;
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.