Variable PK must be deleted when switching either to setup mode or to audit mode. Variable AuditMode must be writable in setup mode and user mode. Variable DeployedMode must only be writable in user mode; simplify the logic.
Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com> --- v2: no change --- lib/efi_loader/efi_var_common.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/efi_loader/efi_var_common.c b/lib/efi_loader/efi_var_common.c index b0c5b672c5..63ad6fea9e 100644 --- a/lib/efi_loader/efi_var_common.c +++ b/lib/efi_loader/efi_var_common.c @@ -240,7 +240,7 @@ static efi_status_t efi_set_secure_state(u8 secure_boot, u8 setup_mode, goto err; ret = efi_set_variable_int(L"AuditMode", &efi_global_variable_guid, - audit_mode || setup_mode ? + audit_mode || deployed_mode ? attributes_ro : attributes_rw, sizeof(audit_mode), &audit_mode, false); if (ret != EFI_SUCCESS) @@ -248,7 +248,7 @@ static efi_status_t efi_set_secure_state(u8 secure_boot, u8 setup_mode, ret = efi_set_variable_int(L"DeployedMode", &efi_global_variable_guid, - audit_mode || deployed_mode || setup_mode ? + deployed_mode || setup_mode ? attributes_ro : attributes_rw, sizeof(deployed_mode), &deployed_mode, false); @@ -273,17 +273,20 @@ static efi_status_t efi_transfer_secure_state(enum efi_secure_mode mode) EFI_PRINT("Switching secure state from %d to %d\n", efi_secure_mode, mode); - if (mode == EFI_MODE_DEPLOYED) { - ret = efi_set_secure_state(1, 0, 0, 1); - if (ret != EFI_SUCCESS) - goto err; - } else if (mode == EFI_MODE_AUDIT) { + if (mode == EFI_MODE_SETUP || mode == EFI_MODE_AUDIT) { ret = efi_set_variable_int(L"PK", &efi_global_variable_guid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, 0, NULL, false); + if (ret != EFI_NOT_FOUND && ret != EFI_SUCCESS) + goto err; + } + + if (mode == EFI_MODE_DEPLOYED) { + ret = efi_set_secure_state(1, 0, 0, 1); if (ret != EFI_SUCCESS) goto err; + } else if (mode == EFI_MODE_AUDIT) { ret = efi_set_secure_state(0, 1, 1, 0); if (ret != EFI_SUCCESS) -- 2.30.2