]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
efi: Add grub_efi_set_variable_with_attributes()
authorOliver Steffen <osteffen@redhat.com>
Fri, 26 May 2023 11:35:42 +0000 (13:35 +0200)
committerDaniel Kiper <daniel.kiper@oracle.com>
Thu, 1 Jun 2023 09:43:25 +0000 (11:43 +0200)
Add a function to the EFI module that allows setting EFI variables
with specific attributes.

This is useful for marking variables as volatile, for example.

Signed-off-by: Oliver Steffen <osteffen@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/kern/efi/efi.c
include/grub/efi/efi.h

index c84d5d28005670c4c5dd6174f2469c6589ed7be4..fdb913fc0a6a7c8dd9773327535632a25396233b 100644 (file)
@@ -203,8 +203,8 @@ grub_efi_set_virtual_address_map (grub_efi_uintn_t memory_map_size,
 }
 
 grub_err_t
-grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid,
-                     void *data, grub_size_t datasize)
+grub_efi_set_variable_with_attributes (const char *var, const grub_efi_guid_t *guid,
+                     void *data, grub_size_t datasize, grub_efi_uint32_t attributes)
 {
   grub_efi_status_t status;
   grub_efi_runtime_services_t *r;
@@ -221,11 +221,7 @@ grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid,
 
   r = grub_efi_system_table->runtime_services;
 
-  status = r->set_variable (var16, guid,
-                           (GRUB_EFI_VARIABLE_NON_VOLATILE
-                            | GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS
-                            | GRUB_EFI_VARIABLE_RUNTIME_ACCESS),
-                           datasize, data);
+  status = r->set_variable (var16, guid, attributes, datasize, data);
   grub_free (var16);
   if (status == GRUB_EFI_SUCCESS)
     return GRUB_ERR_NONE;
@@ -233,6 +229,16 @@ grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid,
   return grub_error (GRUB_ERR_IO, "could not set EFI variable `%s'", var);
 }
 
+grub_err_t
+grub_efi_set_variable (const char *var, const grub_efi_guid_t *guid,
+                     void *data, grub_size_t datasize)
+{
+  return grub_efi_set_variable_with_attributes (var, guid, data, datasize,
+                       GRUB_EFI_VARIABLE_NON_VOLATILE
+                       | GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS
+                       | GRUB_EFI_VARIABLE_RUNTIME_ACCESS);
+}
+
 grub_efi_status_t
 grub_efi_get_variable_with_attributes (const char *var,
                                       const grub_efi_guid_t *guid,
index d3b96761947a094498869cdf3b3f4f68398b084b..26f33433b19a576e2732d693bf90ccd4b4fd3767 100644 (file)
@@ -98,6 +98,12 @@ grub_efi_status_t EXPORT_FUNC (grub_efi_get_variable) (const char *variable,
                                                       grub_size_t *datasize_out,
                                                       void **data_out);
 grub_err_t
+EXPORT_FUNC (grub_efi_set_variable_with_attributes) (const char *var,
+                                    const grub_efi_guid_t *guid,
+                                    void *data,
+                                    grub_size_t datasize,
+                                    grub_efi_uint32_t attributes);
+grub_err_t
 EXPORT_FUNC (grub_efi_set_variable) (const char *var,
                                     const grub_efi_guid_t *guid,
                                     void *data,