098a8a9
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
098a8a9
From: Javier Martinez Canillas <javierm@redhat.com>
098a8a9
Date: Tue, 26 May 2020 16:59:28 +0200
098a8a9
Subject: [PATCH] x86-efi: Reduce maximum bounce buffer size to 16 MiB
098a8a9
098a8a9
The EFI linux loader allocates a bounce buffer to copy the initrd since in
098a8a9
some machines doing DMA on addresses above 4GB is not possible during EFI.
098a8a9
098a8a9
But the verifiers framework also allocates a buffer to copy the initrd in
098a8a9
its grub_file_open() handler. It does this since the data to verify has to
098a8a9
be passed as a single chunk to modules that use the verifiers framework.
098a8a9
098a8a9
If the initrd image size is big there may not be enough memory in the heap
098a8a9
to allocate two buffers of that size. This causes an allocation failure in
098a8a9
the verifiers framework and leads to the initrd not being read.
098a8a9
098a8a9
To prevent these allocation failures, let's reduce the maximum size of the
098a8a9
bounce buffer used in the EFI loader. Since the data read can be copied to
098a8a9
the actual initrd address in multilple chunks.
098a8a9
098a8a9
Resolves: rhbz#1838633
098a8a9
098a8a9
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
098a8a9
---
098a8a9
 grub-core/loader/i386/efi/linux.c | 2 +-
098a8a9
 1 file changed, 1 insertion(+), 1 deletion(-)
098a8a9
098a8a9
diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c
e622855
index 6bc18d5aef..15d40d6e35 100644
098a8a9
--- a/grub-core/loader/i386/efi/linux.c
098a8a9
+++ b/grub-core/loader/i386/efi/linux.c
098a8a9
@@ -144,7 +144,7 @@ grub_linuxefi_unload (void)
098a8a9
   return GRUB_ERR_NONE;
098a8a9
 }
098a8a9
 
098a8a9
-#define BOUNCE_BUFFER_MAX 0x10000000ull
098a8a9
+#define BOUNCE_BUFFER_MAX 0x1000000ull
098a8a9
 
098a8a9
 static grub_ssize_t
098a8a9
 read(grub_file_t file, grub_uint8_t *bufp, grub_size_t len)