summaryrefslogtreecommitdiff
path: root/lib/efi_loader
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2020-06-17 12:20:46 +0200
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-07-11 23:14:17 +0200
commit37fa7cb045cc15b3a22377fa2e3fb00b2d132d7a (patch)
tree3725182299180a3416d08a5e62fbb14b0e505132 /lib/efi_loader
parentdda8c7163a2b4f3d30f54cd3553b2c81bc64e787 (diff)
downloadu-boot-37fa7cb045cc15b3a22377fa2e3fb00b2d132d7a.tar.gz
u-boot-37fa7cb045cc15b3a22377fa2e3fb00b2d132d7a.tar.bz2
u-boot-37fa7cb045cc15b3a22377fa2e3fb00b2d132d7a.zip
efi_loader: keep attributes in efi_set_variable_int
Do not change the value of parameter attributes in function efi_set_variable_int(). This allows to use it later. Do not use variable attr for different purposes but declare separate variables (attr and old_attr). Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'lib/efi_loader')
-rw-r--r--lib/efi_loader/efi_variable.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/efi_loader/efi_variable.c b/lib/efi_loader/efi_variable.c
index 36bac86702..c9980ca692 100644
--- a/lib/efi_loader/efi_variable.c
+++ b/lib/efi_loader/efi_variable.c
@@ -827,7 +827,7 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
efi_uintn_t old_size;
bool append, delete;
u64 time = 0;
- u32 attr;
+ u32 old_attr;
efi_status_t ret = EFI_SUCCESS;
if (!variable_name || !*variable_name || !vendor ||
@@ -843,8 +843,8 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
/* check if a variable exists */
old_size = 0;
- attr = 0;
- ret = efi_get_variable_int(variable_name, vendor, &attr,
+ old_attr = 0;
+ ret = efi_get_variable_int(variable_name, vendor, &old_attr,
&old_size, NULL, &time);
append = !!(attributes & EFI_VARIABLE_APPEND_WRITE);
attributes &= ~(u32)EFI_VARIABLE_APPEND_WRITE;
@@ -852,15 +852,15 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
/* check attributes */
if (old_size) {
- if (ro_check && (attr & EFI_VARIABLE_READ_ONLY)) {
+ if (ro_check && (old_attr & EFI_VARIABLE_READ_ONLY)) {
ret = EFI_WRITE_PROTECTED;
goto err;
}
/* attributes won't be changed */
if (!delete &&
- ((ro_check && attr != attributes) ||
- (!ro_check && ((attr & ~(u32)EFI_VARIABLE_READ_ONLY)
+ ((ro_check && old_attr != attributes) ||
+ (!ro_check && ((old_attr & ~(u32)EFI_VARIABLE_READ_ONLY)
!= (attributes & ~(u32)EFI_VARIABLE_READ_ONLY))))) {
ret = EFI_INVALID_PARAMETER;
goto err;
@@ -902,7 +902,7 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) {
ret = efi_variable_authenticate(variable_name, vendor,
&data_size, &data,
- attributes, &attr,
+ attributes, &old_attr,
&time);
if (ret != EFI_SUCCESS)
goto err;
@@ -936,7 +936,7 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
goto err;
}
ret = efi_get_variable_int(variable_name, vendor,
- &attr, &old_size, old_data, NULL);
+ &old_attr, &old_size, old_data, NULL);
if (ret != EFI_SUCCESS)
goto err;
} else {
@@ -962,8 +962,8 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
EFI_VARIABLE_RUNTIME_ACCESS |
EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS);
s += sprintf(s, "{");
- while (attributes) {
- attr = 1 << (ffs(attributes) - 1);
+ for (u32 attr_rem = attributes; attr_rem;) {
+ u32 attr = 1 << (ffs(attr_rem) - 1);
if (attr == EFI_VARIABLE_READ_ONLY) {
s += sprintf(s, "ro");
@@ -979,8 +979,8 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
s = bin2hex(s, (u8 *)&time, sizeof(time));
}
- attributes &= ~attr;
- if (attributes)
+ attr_rem &= ~attr;
+ if (attr_rem)
s += sprintf(s, ",");
}
s += sprintf(s, "}");