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