/** @file Provides an abstracted interface for configuring PK related variable protection. Copyright (c) Microsoft Corporation. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include /** Disable any applicable protection against variable 'PK'. The implementation of this interface is platform specific, depending on the protection techniques used per platform. Note: It is the platform's responsibility to conduct cautious operation after disabling this protection. @retval EFI_SUCCESS State has been successfully updated. @retval Others Error returned from implementation specific underying APIs. **/ EFI_STATUS EFIAPI DisablePKProtection ( VOID ) { EFI_STATUS Status; EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy; DEBUG ((DEBUG_INFO, "%a() Entry...\n", __func__)); // IMPORTANT NOTE: This operation is sticky and leaves variable protections disabled. // The system *MUST* be reset after performing this operation. Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, (VOID **)&VariablePolicy); if (!EFI_ERROR (Status)) { Status = VariablePolicy->DisableVariablePolicy (); // EFI_ALREADY_STARTED means that everything is currently disabled. // This should be considered SUCCESS. if (Status == EFI_ALREADY_STARTED) { Status = EFI_SUCCESS; } } return Status; }