1From ac5c9367548750e75ed1e7fc4354a3d20186d733 Mon Sep 17 00:00:00 2001 2From: Daniel Kiper <daniel.kiper@oracle.com> 3Date: Thu, 3 Dec 2020 16:01:47 +0100 4Subject: [PATCH] efi: Add a function to read EFI variables with attributes 5 6It will be used to properly detect and report UEFI Secure Boot status to 7the x86 Linux kernel. The functionality will be added by subsequent patches. 8 9Signed-off-by: Ignat Korchagin <ignat@cloudflare.com> 10Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com> 11Signed-off-by: Marco A Benatto <mbenatto@redhat.com> 12Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> 13Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> 14--- 15 grub-core/kern/efi/efi.c | 16 +++++++++++++--- 16 include/grub/efi/efi.h | 5 +++++ 17 2 files changed, 18 insertions(+), 3 deletions(-) 18 19diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c 20index 9403b12cd..2942b8e35 100644 21--- a/grub-core/kern/efi/efi.c 22+++ b/grub-core/kern/efi/efi.c 23@@ -224,8 +224,11 @@ grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid, 24 } 25 26 grub_efi_status_t 27-grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, 28- grub_size_t *datasize_out, void **data_out) 29+grub_efi_get_variable_with_attributes (const char *var, 30+ const grub_efi_guid_t *guid, 31+ grub_size_t *datasize_out, 32+ void **data_out, 33+ grub_efi_uint32_t *attributes) 34 { 35 grub_efi_status_t status; 36 grub_efi_uintn_t datasize = 0; 37@@ -262,7 +265,7 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, 38 return GRUB_EFI_OUT_OF_RESOURCES; 39 } 40 41- status = efi_call_5 (r->get_variable, var16, guid, NULL, &datasize, data); 42+ status = efi_call_5 (r->get_variable, var16, guid, attributes, &datasize, data); 43 grub_free (var16); 44 45 if (status == GRUB_EFI_SUCCESS) 46@@ -276,6 +279,13 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, 47 return status; 48 } 49 50+grub_efi_status_t 51+grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, 52+ grub_size_t *datasize_out, void **data_out) 53+{ 54+ return grub_efi_get_variable_with_attributes (var, guid, datasize_out, data_out, NULL); 55+} 56+ 57 #pragma GCC diagnostic ignored "-Wcast-align" 58 59 /* Search the mods section from the PE32/PE32+ image. This code uses 60diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h 61index 8b2a0f1f5..83d958f99 100644 62--- a/include/grub/efi/efi.h 63+++ b/include/grub/efi/efi.h 64@@ -74,6 +74,11 @@ grub_err_t EXPORT_FUNC (grub_efi_set_virtual_address_map) (grub_efi_uintn_t memo 65 grub_efi_uintn_t descriptor_size, 66 grub_efi_uint32_t descriptor_version, 67 grub_efi_memory_descriptor_t *virtual_map); 68+grub_efi_status_t EXPORT_FUNC (grub_efi_get_variable_with_attributes) (const char *variable, 69+ const grub_efi_guid_t *guid, 70+ grub_size_t *datasize_out, 71+ void **data_out, 72+ grub_efi_uint32_t *attributes); 73 grub_efi_status_t EXPORT_FUNC (grub_efi_get_variable) (const char *variable, 74 const grub_efi_guid_t *guid, 75 grub_size_t *datasize_out, 76-- 772.29.2 78 79