summarylogtreecommitdiffstats
path: root/mm_5.patch
blob: 06ecaefab5035f754faeacde0ac47514a709751b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
---
 grub-core/kern/efi/mm.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
index cfc6a67fc..ced3ee5e7 100644
--- a/grub-core/kern/efi/mm.c
+++ b/grub-core/kern/efi/mm.c
@@ -478,7 +478,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
 }
 
 /* Add memory regions.  */
-static void
+static grub_err_t
 add_memory_regions (grub_efi_memory_descriptor_t *memory_map,
 		    grub_efi_uintn_t desc_size,
 		    grub_efi_memory_descriptor_t *memory_map_end,
@@ -506,9 +506,9 @@ add_memory_regions (grub_efi_memory_descriptor_t *memory_map,
 					   GRUB_EFI_ALLOCATE_ADDRESS,
 					   GRUB_EFI_LOADER_CODE);
       if (! addr)
-	grub_fatal ("cannot allocate conventional memory %p with %u pages",
-		    (void *) ((grub_addr_t) start),
-		    (unsigned) pages);
+	return grub_error (GRUB_ERR_OUT_OF_MEMORY,
+			    "cannot allocate conventional memory %p with %u pages",
+			    (void *) ((grub_addr_t) start), (unsigned) pages);
 
       grub_mm_init_region (addr, PAGES_TO_BYTES (pages));
 
@@ -518,7 +518,9 @@ add_memory_regions (grub_efi_memory_descriptor_t *memory_map,
     }
 
   if (required_pages > 0)
-    grub_fatal ("too little memory");
+    return grub_error (GRUB_ERR_OUT_OF_MEMORY, "too little memory");
+
+  return GRUB_ERR_NONE;
 }
 
 void
@@ -565,6 +567,7 @@ grub_efi_mm_add_regions (grub_efi_uint64_t required_bytes)
   grub_efi_memory_descriptor_t *filtered_memory_map_end;
   grub_efi_uintn_t map_size;
   grub_efi_uintn_t desc_size;
+  grub_err_t err;
   int mm_status;
 
   /* Prepare a memory region to store two memory maps.  */
@@ -609,8 +612,11 @@ grub_efi_mm_add_regions (grub_efi_uint64_t required_bytes)
   sort_memory_map (filtered_memory_map, desc_size, filtered_memory_map_end);
 
   /* Allocate memory regions for GRUB's memory management.  */
-  add_memory_regions (filtered_memory_map, desc_size,
-		      filtered_memory_map_end, BYTES_TO_PAGES (required_bytes));
+  err = add_memory_regions (filtered_memory_map, desc_size,
+			    filtered_memory_map_end,
+			    BYTES_TO_PAGES (required_bytes));
+  if (err != GRUB_ERR_NONE)
+    return err;
 
 #if 0
   /* For debug.  */
-- 
2.32.0


-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEEF9hrgiFbCdvenl/rVbJhu7ckPpQFAmEY9eYACgkQVbJhu7ck
PpQ8oA//VdC2Bv1hz/RkaRrhMM2vg/MSOeCer4RUrDhXWh8Kvt8koc1D7ZoE9MO7
p8h1wkIsEEOrxkF5rwf+D0ZTg6joJcAmXPU/A2BY3oXuMSbKgOY/9/vJfDJio2dt
UNeduTlAJ9YuFtEHEfGEGRVq5egajEoHlas91ScsiYKRqdQmHgkfXeEKGGTr3XMo
RE/FI1duWhmqgzS9kjDq0dbvTtXEBKRndcDPVxyXpFbl1GE+swJzAUsVRNW7PZe8
IYopqz3+6wlp7jo80REtV6ndIw2/N1nvScCF/Mfn5VHf/ObDoWw4cnZvgI/5YEnZ
48v1gMPft95CBjijnoD+F29jFBB6zmK8lFUN4FNY+edoGtlNrmEoZB0FkQJLXWNp
TS6y4EEx9pJzPuxf2VAF5+eMBzqU6f8qZDoty3NMDPNTDXMr0SjeiSJGMfDdU1Qg
Ouk9/I7XOLi91QzbyJP4dpfsI78002rzyibOim8jZ8JFv4InKG1krj1JU2BnVj0h
+7OYIfmDkGZs5ZvZ5PdFgpzqqmlH6wXWZYUMaYHlK2c/mOnJ3ty4NV14cWb8YqrF
VQ3U5EUzUL+8sTQAxwGGCDuC+E6ZuqZ7qVx0O1c5OeOxVh7o3rPLQ24D9a+6J0iv
eGvcgaHX+abwi/1fVL2ItovrGiGtfLtxd8y9G0zctgDBrpqVfvU=
=u8uk
-----END PGP SIGNATURE-----