6f1e3d5
From 81550ebac8fea549c1bbc149688be17ce195bc08 Mon Sep 17 00:00:00 2001
6f1e3d5
From: Peter Jones <pjones@redhat.com>
6f1e3d5
Date: Thu, 1 Jun 2017 10:06:38 -0400
6f1e3d5
Subject: [PATCH 184/198] Use grub_efi_...() memory helpers where reasonable.
6f1e3d5
6f1e3d5
This uses grub_efi_allocate_pool(), grub_efi_free_pool(), and
6f1e3d5
grub_efi_free_pages() instead of open-coded efi_call_N() calls, so we
6f1e3d5
get more reasonable type checking.
6f1e3d5
6f1e3d5
Signed-off-by: Peter Jones <pjones@redhat.com>
6f1e3d5
---
6f1e3d5
 grub-core/loader/efi/chainloader.c | 24 +++++++++---------------
6f1e3d5
 1 file changed, 9 insertions(+), 15 deletions(-)
6f1e3d5
6f1e3d5
diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c
6f1e3d5
index 7826e794a..d2557b38d 100644
6f1e3d5
--- a/grub-core/loader/efi/chainloader.c
6f1e3d5
+++ b/grub-core/loader/efi/chainloader.c
6f1e3d5
@@ -65,7 +65,7 @@ grub_chainloader_unload (void)
6f1e3d5
 
6f1e3d5
   b = grub_efi_system_table->boot_services;
6f1e3d5
   efi_call_1 (b->unload_image, image_handle);
6f1e3d5
-  efi_call_2 (b->free_pages, address, pages);
6f1e3d5
+  grub_efi_free_pages (address, pages);
6f1e3d5
 
6f1e3d5
   grub_free (file_path);
6f1e3d5
   grub_free (cmdline);
6f1e3d5
@@ -108,7 +108,7 @@ grub_chainloader_boot (void)
6f1e3d5
     }
6f1e3d5
 
6f1e3d5
   if (exit_data)
6f1e3d5
-    efi_call_1 (b->free_pool, exit_data);
6f1e3d5
+    grub_efi_free_pool (exit_data);
6f1e3d5
 
6f1e3d5
   grub_loader_unset ();
6f1e3d5
 
6f1e3d5
@@ -500,10 +500,9 @@ grub_efi_get_media_file_path (grub_efi_device_path_t *dp)
6f1e3d5
 static grub_efi_boolean_t
6f1e3d5
 handle_image (void *data, grub_efi_uint32_t datasize)
6f1e3d5
 {
6f1e3d5
-  grub_efi_boot_services_t *b;
6f1e3d5
   grub_efi_loaded_image_t *li, li_bak;
6f1e3d5
   grub_efi_status_t efi_status;
6f1e3d5
-  char *buffer = NULL;
6f1e3d5
+  void *buffer = NULL;
6f1e3d5
   char *buffer_aligned = NULL;
6f1e3d5
   grub_efi_uint32_t i;
6f1e3d5
   struct grub_pe32_section_table *section;
6f1e3d5
@@ -514,8 +513,6 @@ handle_image (void *data, grub_efi_uint32_t datasize)
6f1e3d5
   int found_entry_point = 0;
6f1e3d5
   int rc;
6f1e3d5
 
6f1e3d5
-  b = grub_efi_system_table->boot_services;
6f1e3d5
-
6f1e3d5
   rc = read_header (data, datasize, &context);
6f1e3d5
   if (rc < 0)
6f1e3d5
     {
6f1e3d5
@@ -555,8 +552,8 @@ handle_image (void *data, grub_efi_uint32_t datasize)
6f1e3d5
   grub_dprintf ("chain", "image size is %08"PRIxGRUB_UINT64_T", datasize is %08x\n",
6f1e3d5
 	       context.image_size, datasize);
6f1e3d5
 
6f1e3d5
-  efi_status = efi_call_3 (b->allocate_pool, GRUB_EFI_LOADER_DATA,
6f1e3d5
-			   buffer_size, &buffer);
6f1e3d5
+  efi_status = grub_efi_allocate_pool (GRUB_EFI_LOADER_DATA, buffer_size,
6f1e3d5
+				       &buffer);
6f1e3d5
 
6f1e3d5
   if (efi_status != GRUB_EFI_SUCCESS)
6f1e3d5
     {
6f1e3d5
@@ -788,14 +785,14 @@ handle_image (void *data, grub_efi_uint32_t datasize)
6f1e3d5
 
6f1e3d5
   grub_dprintf ("chain", "entry_point returned %ld\n", efi_status);
6f1e3d5
   grub_memcpy (li, &li_bak, sizeof (grub_efi_loaded_image_t));
6f1e3d5
-  efi_status = efi_call_1 (b->free_pool, buffer);
6f1e3d5
+  efi_status = grub_efi_free_pool (buffer);
6f1e3d5
 
6f1e3d5
   return 1;
6f1e3d5
 
6f1e3d5
 error_exit:
6f1e3d5
   grub_dprintf ("chain", "error_exit: grub_errno: %d\n", grub_errno);
6f1e3d5
   if (buffer)
6f1e3d5
-      efi_call_1 (b->free_pool, buffer);
6f1e3d5
+    grub_efi_free_pool (buffer);
6f1e3d5
 
6f1e3d5
   return 0;
6f1e3d5
 }
6f1e3d5
@@ -803,10 +800,7 @@ error_exit:
6f1e3d5
 static grub_err_t
6f1e3d5
 grub_secureboot_chainloader_unload (void)
6f1e3d5
 {
6f1e3d5
-  grub_efi_boot_services_t *b;
6f1e3d5
-
6f1e3d5
-  b = grub_efi_system_table->boot_services;
6f1e3d5
-  efi_call_2 (b->free_pages, address, pages);
6f1e3d5
+  grub_efi_free_pages (address, pages);
6f1e3d5
   grub_free (file_path);
6f1e3d5
   grub_free (cmdline);
6f1e3d5
   cmdline = 0;
6f1e3d5
@@ -1073,7 +1067,7 @@ fail:
6f1e3d5
   grub_free (file_path);
6f1e3d5
 
6f1e3d5
   if (address)
6f1e3d5
-    efi_call_2 (b->free_pages, address, pages);
6f1e3d5
+    grub_efi_free_pages (address, pages);
6f1e3d5
 
6f1e3d5
   if (cmdline)
6f1e3d5
     grub_free (cmdline);
6f1e3d5
-- 
6f1e3d5
2.14.3
6f1e3d5