Add checks that all memory allocations complete successfully and that
only expected parameters are provided. Check that memory addresses are
within range.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 test/boot/bootflow.c | 64 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 63 insertions(+), 1 deletion(-)

diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c
index 35580cee90c..8b1bc9f10ab 100644
--- a/test/boot/bootflow.c
+++ b/test/boot/bootflow.c
@@ -6,6 +6,7 @@
  * Written by Simon Glass <s...@chromium.org>
  */
 
+#include <bloblist.h>
 #include <bootdev.h>
 #include <bootflow.h>
 #include <bootmeth.h>
@@ -14,6 +15,7 @@
 #include <dm.h>
 #include <efi.h>
 #include <efi_loader.h>
+#include <efi_log.h>
 #include <expo.h>
 #include <mapmem.h>
 #ifdef CONFIG_SANDBOX
@@ -1271,10 +1273,13 @@ BOOTSTD_TEST(bootflow_android_image_v2, UTF_CONSOLE | 
UTF_DM | UTF_SCAN_FDT);
 /* Test EFI bootmeth */
 static int bootflow_efi(struct unit_test_state *uts)
 {
+       struct efil_hdr *hdr = bloblist_find(BLOBLISTT_EFI_LOG, 0);
        static const char *order[] = {"mmc1", "usb", NULL};
+       struct efil_rec_hdr *rec_hdr;
        struct bootstd_priv *std;
        struct udevice *bootstd;
        const char **old_order;
+       int i;
 
        ut_assertok(uclass_first_device_err(UCLASS_BOOTSTD, &bootstd));
        std = dev_get_priv(bootstd);
@@ -1325,7 +1330,64 @@ static int bootflow_efi(struct unit_test_state *uts)
 
        ut_assert_console_end();
 
-       ut_assertok(bootstd_test_drop_bootdev_order(uts));
+       /* check memory allocations are as expected */
+       if (!hdr)
+               return 0;
+
+       for (i = 0, rec_hdr = (void *)hdr + sizeof(*hdr);
+            (void *)rec_hdr - (void *)hdr < hdr->upto;
+            i++, rec_hdr = (void *)rec_hdr + rec_hdr->size) {
+               void *start = (void *)rec_hdr + sizeof(struct efil_rec_hdr);
+
+               switch (rec_hdr->tag) {
+               case EFILT_ALLOCATE_PAGES: {
+                       struct efil_allocate_pages *rec = start;
+
+                       ut_assert(rec_hdr->ended);
+                       ut_assertok(rec_hdr->e_ret);
+                       ut_asserteq(EFI_ALLOCATE_ANY_PAGES, rec->type);
+                       log_debug("rec->memory_type %d\n", rec->memory_type);
+                       ut_assert(rec->memory_type == EFI_RUNTIME_SERVICES_DATA 
||
+                                 rec->memory_type == EFI_BOOT_SERVICES_DATA ||
+                                 rec->memory_type == EFI_ACPI_MEMORY_NVS ||
+                                 rec->memory_type == EFI_LOADER_CODE);
+                       ut_assert(rec->e_memory < gd->ram_size);
+                       break;
+               }
+               case EFILT_FREE_PAGES: {
+                       struct efil_free_pages *rec = start;
+
+                       ut_assert(rec_hdr->ended);
+                       ut_assertok(rec_hdr->e_ret);
+                       ut_assert(rec->memory < gd->ram_size);
+                       break;
+               }
+               case EFILT_ALLOCATE_POOL: {
+                       struct efil_allocate_pool *rec = start;
+
+                       ut_assert(rec_hdr->ended);
+                       ut_assertok(rec_hdr->e_ret);
+                       log_debug("rec->pool_type %d\n", rec->pool_type);
+                       ut_assert(rec->pool_type == EFI_RUNTIME_SERVICES_DATA ||
+                                 rec->pool_type == EFI_BOOT_SERVICES_DATA ||
+                                 rec->pool_type == EFI_ACPI_MEMORY_NVS);
+                       ut_assert(map_to_sysmem((void *)rec->e_buffer) <
+                                 gd->ram_size);
+                       break;
+               }
+               case EFILT_FREE_POOL: {
+                       struct efil_free_pool *rec = start;
+
+                       ut_assert(rec_hdr->ended);
+                       ut_assertok(rec_hdr->e_ret);
+                       ut_assert(map_to_sysmem((void *)rec->buffer) <
+                                 gd->ram_size);
+                       break;
+               }
+               default:
+                       break;
+               }
+       }
 
        return 0;
 }
-- 
2.34.1

Reply via email to