summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Hu <ivan.hu@canonical.com>2016-11-22 06:26:01 +0800
committerPeter Jones <pjones@redhat.com>2017-02-06 11:16:24 -0500
commit07bda58596608f05bfa035a1cc5710f5ac8ea3d9 (patch)
tree90772dc65193b7069010888bb32e8cc0bfd24cf8
parent03b9f800b99b2f980e13fbc994d14bd8ec340c41 (diff)
downloadefi-boot-shim-07bda58596608f05bfa035a1cc5710f5ac8ea3d9.tar.gz
efi-boot-shim-07bda58596608f05bfa035a1cc5710f5ac8ea3d9.zip
shim: fix the mirroring MokSBState fail
Some machines have already embedded MokSBStateRT varaible with EFI_VARIABLE_NON_VOLATILE attribute, and some users might disable shim vailidation manually by creating MokSBStateRT. It causes mirroring MokSBState fail because the variable cannot be set with different attribute again, and gets error massage every time when booting. Fix it with checking the MokSBStateRT existence and deleting it before mirroring it. Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
-rw-r--r--shim.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/shim.c b/shim.c
index cc3654e7..52cf8a53 100644
--- a/shim.c
+++ b/shim.c
@@ -2022,18 +2022,32 @@ EFI_STATUS mirror_mok_sb_state()
UINTN DataSize = 0;
efi_status = get_variable(L"MokSBState", &Data, &DataSize, shim_lock_guid);
- if (efi_status != EFI_SUCCESS)
- return efi_status;
+ if (efi_status == EFI_SUCCESS) {
+ UINT8 *Data_RT = NULL;
+ UINTN DataSize_RT = 0;
+
+ efi_status = get_variable(L"MokSBStateRT", &Data_RT,
+ &DataSize_RT, shim_lock_guid);
+ if (efi_status == EFI_SUCCESS) {
+ efi_status = uefi_call_wrapper(RT->SetVariable, 5,
+ L"MokSBStateRT",
+ &shim_lock_guid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS
+ | EFI_VARIABLE_RUNTIME_ACCESS
+ | EFI_VARIABLE_NON_VOLATILE,
+ 0, NULL);
+ }
- efi_status = uefi_call_wrapper(RT->SetVariable, 5, L"MokSBStateRT",
- &shim_lock_guid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS
- | EFI_VARIABLE_RUNTIME_ACCESS,
- DataSize, Data);
- if (efi_status != EFI_SUCCESS) {
- console_error(L"Failed to set MokSBStateRT", efi_status);
+ efi_status = uefi_call_wrapper(RT->SetVariable, 5,
+ L"MokSBStateRT",
+ &shim_lock_guid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS
+ | EFI_VARIABLE_RUNTIME_ACCESS,
+ DataSize, Data);
+ if (efi_status != EFI_SUCCESS) {
+ console_error(L"Failed to set MokSBStateRT", efi_status);
+ }
}
-
return efi_status;
}