dcavalca / rpms / grub2

Forked from rpms/grub2 3 years ago
Clone

Blame SOURCES/0233-loader-linux-Make-trailer-initrd-entry-aligned-again.patch

27a4da
From cab5d30d4cb182ee9dfd03079b415e1e0285de99 Mon Sep 17 00:00:00 2001
27a4da
From: =?UTF-8?q?Bernhard=20=C3=9Cbelacker?= <bernhardu@vr-web.de>
27a4da
Date: Mon, 20 Jul 2015 14:06:45 +0200
27a4da
Subject: [PATCH 233/260] loader/linux: Make trailer initrd entry aligned
27a4da
 again.
27a4da
27a4da
Regression from commit:
27a4da
  loader/linux: do not pad initrd with zeroes at the end
27a4da
  a8c473288d3f0a5e17a903a5121dea1a695dda3b
27a4da
27a4da
Wimboot fails since the change above because it expects the "trailer"
27a4da
initrd element on an aligned address.
27a4da
This issue shows only when newc_name is used and the last initrd
27a4da
entry has a not aligned size.
27a4da
---
27a4da
 grub-core/loader/linux.c | 7 ++++++-
27a4da
 1 file changed, 6 insertions(+), 1 deletion(-)
27a4da
27a4da
diff --git a/grub-core/loader/linux.c b/grub-core/loader/linux.c
27a4da
index d2cd591f6..be6fa0f4d 100644
27a4da
--- a/grub-core/loader/linux.c
27a4da
+++ b/grub-core/loader/linux.c
27a4da
@@ -213,6 +213,7 @@ grub_initrd_init (int argc, char *argv[],
27a4da
 
27a4da
   if (newc)
27a4da
     {
27a4da
+      initrd_ctx->size = ALIGN_UP (initrd_ctx->size, 4);
27a4da
       initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
27a4da
 				    + sizeof ("TRAILER!!!") - 1, 4);
27a4da
       free_dir (root);
27a4da
@@ -290,7 +291,11 @@ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx,
27a4da
       ptr += cursize;
27a4da
     }
27a4da
   if (newc)
27a4da
-    ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!") - 1, 0, 0);
27a4da
+    {
27a4da
+      grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
27a4da
+      ptr += ALIGN_UP_OVERHEAD (cursize, 4);
27a4da
+      ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!") - 1, 0, 0);
27a4da
+    }
27a4da
   free_dir (root);
27a4da
   root = 0;
27a4da
   return GRUB_ERR_NONE;
27a4da
-- 
27a4da
2.13.0
27a4da