Check the parameters of boottime service GetMemoryMap().
Return EFI_INVALID_PARAMETER where required by the UEFI spec.

Signed-off-by: Heinrich Schuchardt <[email protected]>
---
 lib/efi_loader/efi_memory.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
index f5aecd4b41..bad8704269 100644
--- a/lib/efi_loader/efi_memory.c
+++ b/lib/efi_loader/efi_memory.c
@@ -453,6 +453,9 @@ efi_status_t efi_get_memory_map(efi_uintn_t 
*memory_map_size,
        struct list_head *lhandle;
        efi_uintn_t provided_map_size = *memory_map_size;
 
+       if (!memory_map_size)
+               return EFI_INVALID_PARAMETER;
+
        list_for_each(lhandle, &efi_mem)
                map_entries++;
 
@@ -463,6 +466,9 @@ efi_status_t efi_get_memory_map(efi_uintn_t 
*memory_map_size,
        if (provided_map_size < map_size)
                return EFI_BUFFER_TOO_SMALL;
 
+       if (!memory_map)
+               return EFI_INVALID_PARAMETER;
+
        if (descriptor_size)
                *descriptor_size = sizeof(struct efi_mem_desc);
 
@@ -470,19 +476,18 @@ efi_status_t efi_get_memory_map(efi_uintn_t 
*memory_map_size,
                *descriptor_version = EFI_MEMORY_DESCRIPTOR_VERSION;
 
        /* Copy list into array */
-       if (memory_map) {
-               /* Return the list in ascending order */
-               memory_map = &memory_map[map_entries - 1];
-               list_for_each(lhandle, &efi_mem) {
-                       struct efi_mem_list *lmem;
+       /* Return the list in ascending order */
+       memory_map = &memory_map[map_entries - 1];
+       list_for_each(lhandle, &efi_mem) {
+               struct efi_mem_list *lmem;
 
-                       lmem = list_entry(lhandle, struct efi_mem_list, link);
-                       *memory_map = lmem->desc;
-                       memory_map--;
-               }
+               lmem = list_entry(lhandle, struct efi_mem_list, link);
+               *memory_map = lmem->desc;
+               memory_map--;
        }
 
-       *map_key = 0;
+       if (map_key)
+               *map_key = 0;
 
        return EFI_SUCCESS;
 }
-- 
2.18.0

_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to