mirror of
https://xff.cz/git/u-boot/
synced 2025-09-04 10:12:14 +02:00
Merge tag 'efi-2019-10-rc5' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
Pull request for UEFI sub-system for v2019.10-rc5 Bug fixes for the SetVariable() boot service.
This commit is contained in:
@@ -43,11 +43,6 @@ const efi_guid_t efi_guid_unicode_collation_protocol2 =
|
|||||||
* See the Unified Extensible Firmware Interface (UEFI) specification for
|
* See the Unified Extensible Firmware Interface (UEFI) specification for
|
||||||
* details.
|
* details.
|
||||||
*
|
*
|
||||||
* TODO:
|
|
||||||
* The implementation does not follow the Unicode collation algorithm.
|
|
||||||
* For ASCII characters it results in the same sort order as EDK2.
|
|
||||||
* We could use table UNICODE_CAPITALIZATION_TABLE for better results.
|
|
||||||
*
|
|
||||||
* Return: 0: s1 == s2, > 0: s1 > s2, < 0: s1 < s2
|
* Return: 0: s1 == s2, > 0: s1 > s2, < 0: s1 < s2
|
||||||
*/
|
*/
|
||||||
static efi_intn_t EFIAPI efi_stri_coll(
|
static efi_intn_t EFIAPI efi_stri_coll(
|
||||||
|
@@ -443,8 +443,6 @@ efi_status_t EFIAPI efi_set_variable(u16 *variable_name,
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
#define ACCESS_ATTR (EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS)
|
|
||||||
|
|
||||||
old_val = env_get(native_name);
|
old_val = env_get(native_name);
|
||||||
if (old_val) {
|
if (old_val) {
|
||||||
old_val = parse_attr(old_val, &attr);
|
old_val = parse_attr(old_val, &attr);
|
||||||
@@ -455,7 +453,9 @@ efi_status_t EFIAPI efi_set_variable(u16 *variable_name,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((data_size == 0) || !(attributes & ACCESS_ATTR)) {
|
if ((data_size == 0 &&
|
||||||
|
!(attributes & EFI_VARIABLE_APPEND_WRITE)) ||
|
||||||
|
!attributes) {
|
||||||
/* delete the variable: */
|
/* delete the variable: */
|
||||||
env_set(native_name, NULL);
|
env_set(native_name, NULL);
|
||||||
ret = EFI_SUCCESS;
|
ret = EFI_SUCCESS;
|
||||||
@@ -470,7 +470,7 @@ efi_status_t EFIAPI efi_set_variable(u16 *variable_name,
|
|||||||
|
|
||||||
if (attributes & EFI_VARIABLE_APPEND_WRITE) {
|
if (attributes & EFI_VARIABLE_APPEND_WRITE) {
|
||||||
if (!prefix(old_val, "(blob)")) {
|
if (!prefix(old_val, "(blob)")) {
|
||||||
return EFI_DEVICE_ERROR;
|
ret = EFI_DEVICE_ERROR;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
old_size = strlen(old_val);
|
old_size = strlen(old_val);
|
||||||
@@ -478,8 +478,9 @@ efi_status_t EFIAPI efi_set_variable(u16 *variable_name,
|
|||||||
old_size = 0;
|
old_size = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((data_size == 0) || !(attributes & ACCESS_ATTR) ||
|
if ((data_size == 0 &&
|
||||||
(attributes & EFI_VARIABLE_APPEND_WRITE)) {
|
!(attributes & EFI_VARIABLE_APPEND_WRITE)) ||
|
||||||
|
!attributes) {
|
||||||
/* delete, but nothing to do */
|
/* delete, but nothing to do */
|
||||||
ret = EFI_NOT_FOUND;
|
ret = EFI_NOT_FOUND;
|
||||||
goto out;
|
goto out;
|
||||||
|
Reference in New Issue
Block a user