summaryrefslogtreecommitdiffstats
path: root/meta/recipes-bsp/grub/files/0007-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-bsp/grub/files/0007-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch')
-rw-r--r--meta/recipes-bsp/grub/files/0007-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/meta/recipes-bsp/grub/files/0007-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch b/meta/recipes-bsp/grub/files/0007-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch
new file mode 100644
index 0000000000..d55709406b
--- /dev/null
+++ b/meta/recipes-bsp/grub/files/0007-kern-efi-mm-Fix-possible-NULL-pointer-dereference.patch
@@ -0,0 +1,65 @@
1From be03a18b8767be50f16a845c389fd5ed29aae055 Mon Sep 17 00:00:00 2001
2From: Darren Kenny <darren.kenny@oracle.com>
3Date: Fri, 11 Dec 2020 15:03:13 +0000
4Subject: [PATCH] kern/efi/mm: Fix possible NULL pointer dereference
5
6The model of grub_efi_get_memory_map() is that if memory_map is NULL,
7then the purpose is to discover how much memory should be allocated to
8it for the subsequent call.
9
10The problem here is that with grub_efi_is_finished set to 1, there is no
11check at all that the function is being called with a non-NULL memory_map.
12
13While this MAY be true, we shouldn't assume it.
14
15The solution to this is to behave as expected, and if memory_map is NULL,
16then don't try to use it and allow memory_map_size to be filled in, and
17return 0 as is done later in the code if the buffer is too small (or NULL).
18
19Additionally, drop unneeded ret = 1.
20
21Fixes: CID 96632
22
23Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
24Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
25
26Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=6aee4bfd6973c714056fb7b56890b8d524e94ee1]
27Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com>
28---
29 grub-core/kern/efi/mm.c | 19 ++++++++++++++-----
30 1 file changed, 14 insertions(+), 5 deletions(-)
31
32diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
33index b02fab1..5afcef7 100644
34--- a/grub-core/kern/efi/mm.c
35+++ b/grub-core/kern/efi/mm.c
36@@ -328,15 +328,24 @@ grub_efi_get_memory_map (grub_efi_uintn_t *memory_map_size,
37 if (grub_efi_is_finished)
38 {
39 int ret = 1;
40- if (*memory_map_size < finish_mmap_size)
41+
42+ if (memory_map != NULL)
43 {
44- grub_memcpy (memory_map, finish_mmap_buf, *memory_map_size);
45- ret = 0;
46+ if (*memory_map_size < finish_mmap_size)
47+ {
48+ grub_memcpy (memory_map, finish_mmap_buf, *memory_map_size);
49+ ret = 0;
50+ }
51+ else
52+ grub_memcpy (memory_map, finish_mmap_buf, finish_mmap_size);
53 }
54 else
55 {
56- grub_memcpy (memory_map, finish_mmap_buf, finish_mmap_size);
57- ret = 1;
58+ /*
59+ * Incomplete, no buffer to copy into, same as
60+ * GRUB_EFI_BUFFER_TOO_SMALL below.
61+ */
62+ ret = 0;
63 }
64 *memory_map_size = finish_mmap_size;
65 if (map_key)