]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* include/grub/misc.h (ALIGN_UP_OVERHEAD): New define.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 5 Mar 2012 00:17:55 +0000 (01:17 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 5 Mar 2012 00:17:55 +0000 (01:17 +0100)
* grub-core/loader/i386/linux.c (grub_cmd_initrd): Align initrds at 4.
* grub-core/loader/i386/pc/linux.c (grub_cmd_initrd): Likewise.
* grub-core/loader/ia64/efi/linux.c (grub_cmd_initrd): Likewise.
* grub-core/loader/mips/linux.c (grub_cmd_initrd): Likewise.
* grub-core/loader/powerpc/ieee1275/linux.c (grub_cmd_initrd): Likewise.
* grub-core/loader/sparc64/ieee1275/linux.c (grub_cmd_initrd): Likewise.

ChangeLog
grub-core/loader/i386/linux.c
grub-core/loader/i386/pc/linux.c
grub-core/loader/ia64/efi/linux.c
grub-core/loader/mips/linux.c
grub-core/loader/powerpc/ieee1275/linux.c
grub-core/loader/sparc64/ieee1275/linux.c
include/grub/misc.h

index 57d7dfb3e8781faf0f8e64091a06811c5c26c163..60348fde1a0112f34e610572e6f6be7e3f411883 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2012-03-04  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * include/grub/misc.h (ALIGN_UP_OVERHEAD): New define.
+       * grub-core/loader/i386/linux.c (grub_cmd_initrd): Align initrds at 4.
+       * grub-core/loader/i386/pc/linux.c (grub_cmd_initrd): Likewise.
+       * grub-core/loader/ia64/efi/linux.c (grub_cmd_initrd): Likewise.
+       * grub-core/loader/mips/linux.c (grub_cmd_initrd): Likewise.
+       * grub-core/loader/powerpc/ieee1275/linux.c (grub_cmd_initrd): Likewise.
+       * grub-core/loader/sparc64/ieee1275/linux.c (grub_cmd_initrd): Likewise.
+
 2012-03-04  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/commands/menuentry.c (options): Remove
index bc1c81fb85305d4b1cbbbb2eee45e0226ec04b79..df133c2cbfc4ebb655e90ee4b67d03fb37fec7ec 100644 (file)
@@ -1034,7 +1034,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
       if (! files[i])
        goto fail;
       nfiles++;
-      size += grub_file_size (files[i]);
+      size += ALIGN_UP (grub_file_size (files[i]), 4);
     }
 
   initrd_pages = (page_align (size) >> 12);
@@ -1101,6 +1101,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
          goto fail;
        }
       ptr += cursize;
+      grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+      ptr += ALIGN_UP_OVERHEAD (cursize, 4);
     }
 
   grub_dprintf ("linux", "Initrd, addr=0x%x, size=0x%x\n",
index 90497c0ccb59e4b94c98b3203eae468e7becdc07..4eeb1b6c2faa03bcbbd3fe3ea5488ecef538d3c2 100644 (file)
@@ -421,7 +421,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
       if (! files[i])
        goto fail;
       nfiles++;
-      size += grub_file_size (files[i]);
+      size += ALIGN_UP (grub_file_size (files[i]), 4);
     }
 
   {
@@ -449,6 +449,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
          goto fail;
        }
       ptr += cursize;
+      grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+      ptr += ALIGN_UP_OVERHEAD (cursize, 4);
     }
 
   lh->ramdisk_image = initrd_addr;
index 5301fa67ae81e06b84cfad8483a3d92544fab932..17843fdbf912b8d627310dccf97c5211521b95f7 100644 (file)
@@ -597,7 +597,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
       if (! files[i])
        goto fail;
       nfiles++;
-      initrd_size += grub_file_size (files[i]);
+      initrd_size += ALIGN_UP (grub_file_size (files[i]), 4);
       grub_dprintf ("linux", "File %d: %s\n", i, argv[i]);
     }
 
@@ -624,6 +624,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
          goto fail;
        }
       ptr += cursize;
+      grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+      ptr += ALIGN_UP_OVERHEAD (cursize, 4);
     }
  fail:
   for (i = 0; i < nfiles; i++)
index 2b7df0a78b80368950ae5e1dbf11d6b65ea7bb85..f2cf7ccfc62d275ad821ea4e98ac11b88d6c6c97 100644 (file)
@@ -468,7 +468,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
       if (! files[i])
        goto fail;
       nfiles++;
-      size += grub_file_size (files[i]);
+      size += ALIGN_UP (grub_file_size (files[i]), 4);
     }
 
   {
@@ -499,6 +499,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
          goto fail;
        }
       ptr += cursize;
+      grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+      ptr += ALIGN_UP_OVERHEAD (cursize, 4);
     }
 
 #ifdef GRUB_MACHINE_MIPS_QEMU_MIPS
index 3929b0f37c76f45ea005188cc1d9c196d44d70d8..5cfa988f62bd3704520e74f3eb0a622083ca4133 100644 (file)
@@ -350,7 +350,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
       if (! files[i])
        goto fail;
       nfiles++;
-      size += grub_file_size (files[i]);
+      size += ALIGN_UP (grub_file_size (files[i]), 4);
     }
 
   first_addr = linux_addr + linux_size;
@@ -376,6 +376,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
          goto fail;
        }
       ptr += cursize;
+      grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+      ptr += ALIGN_UP_OVERHEAD (cursize, 4);
     }
 
   initrd_addr = addr;
index 351a74cb5a1b52200adffe0befc7f0ed0a6f4978..06d1df6ae67d91c91fd0dde530ea47f6aeed3172 100644 (file)
@@ -403,7 +403,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
       if (! files[i])
        goto fail;
       nfiles++;
-      size += grub_file_size (files[i]);
+      size += ALIGN_UP(grub_file_size (files[i]), 4);
     }
 
   addr = 0x60000000;
@@ -438,6 +438,8 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
          goto fail;
        }
       ptr += cursize;
+      grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
+      ptr += ALIGN_UP_OVERHEAD (cursize, 4);
     }
 
   initrd_addr = addr;
index e3d61d75b8bcc1c5353180eb7a812d796ef68d6f..a87c43691a778816453d5346dc0951eb5de91b17 100644 (file)
@@ -44,6 +44,7 @@
 
 #define ALIGN_UP(addr, align) \
        ((addr + (typeof (addr)) align - 1) & ~((typeof (addr)) align - 1))
+#define ALIGN_UP_OVERHEAD(addr, align) ((-(addr)) & ((typeof (addr)) (align) - 1))
 #define ALIGN_DOWN(addr, align) \
        ((addr) & ~((typeof (addr)) align - 1))
 #define ARRAY_SIZE(array) (sizeof (array) / sizeof (array[0]))