[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] efi: add non-volatile parameter to grub_efi_set_variable
From: |
Flavio Suligoi |
Subject: |
[PATCH 1/2] efi: add non-volatile parameter to grub_efi_set_variable |
Date: |
Wed, 29 Apr 2020 16:54:09 +0200 |
The current version of the function:
grub_efi_set_variable
always set an EFI variable as "non-volatile", since the
variable attribute:
GRUB_EFI_VARIABLE_NON_VOLATILE
is fixed in the EFI SetVariable() call.
With this change it is possible to decide if the written
EFI variable is volatile or not.
Signed-off-by: Flavio Suligoi <address@hidden>
---
grub-core/commands/efi/efifwsetup.c | 2 +-
grub-core/kern/efi/efi.c | 15 +++++++++------
include/grub/efi/efi.h | 3 ++-
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/grub-core/commands/efi/efifwsetup.c
b/grub-core/commands/efi/efifwsetup.c
index 7a137a7..4ccb578 100644
--- a/grub-core/commands/efi/efifwsetup.c
+++ b/grub-core/commands/efi/efifwsetup.c
@@ -45,7 +45,7 @@ grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)),
os_indications |= *old_os_indications;
status = grub_efi_set_variable ("OsIndications", &global, &os_indications,
- sizeof (os_indications));
+ sizeof (os_indications), 1);
if (status != GRUB_ERR_NONE)
return status;
diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
index 3a708ed..dcb09b2 100644
--- a/grub-core/kern/efi/efi.c
+++ b/grub-core/kern/efi/efi.c
@@ -193,12 +193,15 @@ 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)
+ void *data, grub_size_t datasize,
+ grub_efi_boolean_t non_volatile)
{
grub_efi_status_t status;
grub_efi_runtime_services_t *r;
grub_efi_char16_t *var16;
grub_size_t len, len16;
+ grub_uint64_t efi_attrib = GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ GRUB_EFI_VARIABLE_RUNTIME_ACCESS;
len = grub_strlen (var);
len16 = len * GRUB_MAX_UTF16_PER_UTF8;
@@ -210,11 +213,11 @@ grub_efi_set_variable(const char *var, const
grub_efi_guid_t *guid,
r = grub_efi_system_table->runtime_services;
- status = efi_call_5 (r->set_variable, var16, guid,
- (GRUB_EFI_VARIABLE_NON_VOLATILE
- | GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS
- | GRUB_EFI_VARIABLE_RUNTIME_ACCESS),
- datasize, data);
+ if (non_volatile)
+ efi_attrib |= GRUB_EFI_VARIABLE_NON_VOLATILE;
+
+ status = efi_call_5 (r->set_variable, var16, guid, efi_attrib,
+ datasize, data);
grub_free (var16);
if (status == GRUB_EFI_SUCCESS)
return GRUB_ERR_NONE;
diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h
index e90e00d..9b04150 100644
--- a/include/grub/efi/efi.h
+++ b/include/grub/efi/efi.h
@@ -81,7 +81,8 @@ grub_err_t
EXPORT_FUNC (grub_efi_set_variable) (const char *var,
const grub_efi_guid_t *guid,
void *data,
- grub_size_t datasize);
+ grub_size_t datasize,
+ grub_efi_boolean_t non_volatile);
int
EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1,
const grub_efi_device_path_t *dp2);
--
2.7.4
- [PATCH 1/2] efi: add non-volatile parameter to grub_efi_set_variable,
Flavio Suligoi <=