mirror of
https://src.fedoraproject.org/rpms/grub2.git
synced 2024-12-03 01:20: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>
97 lines
3.2 KiB
Diff
97 lines
3.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Matthew Garrett <mjg59@coreos.com>
|
|
Date: Fri, 5 Jul 2019 21:12:00 +0200
|
|
Subject: [PATCH] Rework linux16 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 int it
|
|
before pulling out the individual blocks later on.
|
|
---
|
|
grub-core/loader/i386/pc/linux.c | 33 +++++++++++++++++++++------------
|
|
1 file changed, 21 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c
|
|
index eea25ea39ca..73fb91e0570 100644
|
|
--- a/grub-core/loader/i386/pc/linux.c
|
|
+++ b/grub-core/loader/i386/pc/linux.c
|
|
@@ -123,13 +123,14 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
grub_file_t file = 0;
|
|
struct linux_i386_kernel_header lh;
|
|
grub_uint8_t setup_sects;
|
|
- grub_size_t real_size;
|
|
+ grub_size_t real_size, kernel_offset = 0;
|
|
grub_ssize_t len;
|
|
int i;
|
|
char *grub_linux_prot_chunk;
|
|
int grub_linux_is_bzimage;
|
|
grub_addr_t grub_linux_prot_target;
|
|
grub_err_t err;
|
|
+ grub_uint8_t *kernel = NULL;
|
|
|
|
grub_dl_ref (my_mod);
|
|
|
|
@@ -143,7 +144,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"),
|
|
@@ -151,6 +160,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");
|
|
@@ -314,13 +326,9 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
grub_memmove (grub_linux_real_chunk, &lh, sizeof (lh));
|
|
|
|
len = real_size + GRUB_DISK_SECTOR_SIZE - sizeof (lh);
|
|
- if (grub_file_read (file, grub_linux_real_chunk + sizeof (lh), len) != len)
|
|
- {
|
|
- if (!grub_errno)
|
|
- grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
|
- argv[0]);
|
|
- goto fail;
|
|
- }
|
|
+ grub_memcpy (grub_linux_real_chunk + sizeof (lh), kernel + kernel_offset,
|
|
+ len);
|
|
+ kernel_offset += len;
|
|
|
|
if (lh.header != grub_cpu_to_le32_compile_time (GRUB_LINUX_I386_MAGIC_SIGNATURE)
|
|
|| grub_le_to_cpu16 (lh.version) < 0x0200)
|
|
@@ -358,9 +366,8 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
}
|
|
|
|
len = grub_linux16_prot_size;
|
|
- if (grub_file_read (file, grub_linux_prot_chunk, len) != len && !grub_errno)
|
|
- grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
|
- argv[0]);
|
|
+ grub_memcpy (grub_linux_prot_chunk, kernel + kernel_offset, len);
|
|
+ kernel_offset += len;
|
|
|
|
if (grub_errno == GRUB_ERR_NONE)
|
|
{
|
|
@@ -370,6 +377,8 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|
|
|
fail:
|
|
|
|
+ grub_free (kernel);
|
|
+
|
|
if (file)
|
|
grub_file_close (file);
|
|
|