mirror of
https://src.fedoraproject.org/rpms/grub2.git
synced 2024-11-28 15:46:53 +00:00
e1531466e1
This change updates grub to the 2.04 release. The new release changed how grub is built, so the bootstrap and bootstrap.conf files have to be added to the dist-git. Also, the gitignore file changed so it has to be updated. Since the patches have been forward ported to 2.04, there's no need for a logic to maintain a patch with the delta between the release and the grub master branch. So the release-to-master.patch is dropped and no longer is updated by the do-rebase script. Also since gnulib isn't part of the grub repository anymore and cloned by the boostrap tool, a gnulib tarball is included as other source file and copied before calling the bootstrap tool. That way grub can be built even in builders that only have access to the sources lookaside cache. Resolves: rhbz#1727279 Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
114 lines
3.8 KiB
Diff
114 lines
3.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Matthew Garrett <mjg59@coreos.com>
|
|
Date: Fri, 5 Jul 2019 20:54:51 +0200
|
|
Subject: [PATCH] Rework linux command
|
|
|
|
We want a single buffer that contains the entire kernel image in order to
|
|
perform a TPM measurement. Allocate one and copy the entire kernel into it
|
|
before pulling out the individual blocks later on.
|
|
---
|
|
grub-core/loader/i386/linux.c | 36 +++++++++++++++++++++++-------------
|
|
1 file changed, 23 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c
|
|
index d0501e22957..b255c950526 100644
|
|
--- a/grub-core/loader/i386/linux.c
|
|
+++ b/grub-core/loader/i386/linux.c
|
|
@@ -641,13 +641,15 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
{
|
|
grub_file_t file = 0;
|
|
struct linux_i386_kernel_header lh;
|
|
+ grub_uint8_t *linux_params_ptr;
|
|
grub_uint8_t setup_sects;
|
|
- grub_size_t real_size, prot_size, prot_file_size;
|
|
+ grub_size_t real_size, prot_size, prot_file_size, kernel_offset;
|
|
grub_ssize_t len;
|
|
int i;
|
|
grub_size_t align, min_align;
|
|
int relocatable;
|
|
grub_uint64_t preferred_address = GRUB_LINUX_BZIMAGE_ADDR;
|
|
+ grub_uint8_t *kernel = NULL;
|
|
|
|
grub_dl_ref (my_mod);
|
|
|
|
@@ -661,7 +663,15 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
if (! file)
|
|
goto fail;
|
|
|
|
- if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
|
+ len = grub_file_size (file);
|
|
+ kernel = grub_malloc (len);
|
|
+ if (!kernel)
|
|
+ {
|
|
+ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("cannot allocate kernel buffer"));
|
|
+ goto fail;
|
|
+ }
|
|
+
|
|
+ if (grub_file_read (file, kernel, len) != len)
|
|
{
|
|
if (!grub_errno)
|
|
grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
|
@@ -669,6 +679,9 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
goto fail;
|
|
}
|
|
|
|
+ grub_memcpy (&lh, kernel, sizeof (lh));
|
|
+ kernel_offset = sizeof (lh);
|
|
+
|
|
if (lh.boot_flag != grub_cpu_to_le16_compile_time (0xaa55))
|
|
{
|
|
grub_error (GRUB_ERR_BAD_OS, "invalid magic number");
|
|
@@ -760,6 +773,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
preferred_address))
|
|
goto fail;
|
|
|
|
+
|
|
grub_memset (&linux_params, 0, sizeof (linux_params));
|
|
grub_memcpy (&linux_params.setup_sects, &lh.setup_sects, sizeof (lh) - 0x1F1);
|
|
|
|
@@ -782,13 +796,9 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
/* We've already read lh so there is no need to read it second time. */
|
|
len -= sizeof(lh);
|
|
|
|
- if (grub_file_read (file, (char *) &linux_params + sizeof (lh), len) != len)
|
|
- {
|
|
- if (!grub_errno)
|
|
- grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
|
- argv[0]);
|
|
- goto fail;
|
|
- }
|
|
+ linux_params_ptr = (void *)&linux_params;
|
|
+ grub_memcpy (linux_params_ptr + sizeof (lh), kernel + kernel_offset, len);
|
|
+ kernel_offset += len;
|
|
|
|
linux_params.type_of_loader = GRUB_LINUX_BOOT_LOADER_TYPE;
|
|
|
|
@@ -847,7 +857,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
|
|
/* The other parameters are filled when booting. */
|
|
|
|
- grub_file_seek (file, real_size + GRUB_DISK_SECTOR_SIZE);
|
|
+ kernel_offset = real_size + GRUB_DISK_SECTOR_SIZE;
|
|
|
|
grub_dprintf ("linux", "bzImage, setup=0x%x, size=0x%x\n",
|
|
(unsigned) real_size, (unsigned) prot_size);
|
|
@@ -1001,9 +1011,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
}
|
|
|
|
len = prot_file_size;
|
|
- if (grub_file_read (file, prot_mode_mem, len) != len && !grub_errno)
|
|
- grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
|
- argv[0]);
|
|
+ grub_memcpy (prot_mode_mem, kernel + kernel_offset, len);
|
|
|
|
if (grub_errno == GRUB_ERR_NONE)
|
|
{
|
|
@@ -1014,6 +1022,8 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
|
|
fail:
|
|
|
|
+ grub_free (kernel);
|
|
+
|
|
if (file)
|
|
grub_file_close (file);
|
|
|