--- 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-----