efi: Add grub_efi_set_variable_with_attributes()

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>
This commit is contained in:
Oliver Steffen 2023-05-26 13:35:42 +02:00 committed by Daniel Kiper
parent 6f05a27796
commit 7e4da6fb2d
2 changed files with 19 additions and 7 deletions

View 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,

View 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,