information provided through PCDs and libraries.\r
\r
Copyright (c) Microsoft Corporation.<BR>\r
- Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
#include <Library/FmpDependencyDeviceLib.h>\r
#include <Protocol/FirmwareManagement.h>\r
#include <Protocol/FirmwareManagementProgress.h>\r
-#include <Protocol/VariableLock.h>\r
#include <Guid/SystemResourceTable.h>\r
#include <Guid/EventGroup.h>\r
#include <LastAttemptStatus.h>\r
#include <FmpLastAttemptStatus.h>\r
+#include <Library/VariablePolicyHelperLib.h>\r
\r
#define VERSION_STRING_NOT_SUPPORTED L"VERSION STRING NOT SUPPORTED"\r
#define VERSION_STRING_NOT_AVAILABLE L"VERSION STRING NOT AVAILABLE"\r
# information provided through PCDs and libraries.\r
#\r
# Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>\r
-# Copyright (c) 2018 - 2020, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>\r
#\r
# SPDX-License-Identifier: BSD-2-Clause-Patent\r
##\r
FmpDependencyLib\r
FmpDependencyCheckLib\r
FmpDependencyDeviceLib\r
+ VariablePolicyHelperLib\r
\r
[Guids]\r
gEfiEndOfDxeEventGroupGuid\r
\r
[Protocols]\r
- gEdkiiVariableLockProtocolGuid ## CONSUMES\r
gEfiFirmwareManagementProtocolGuid ## PRODUCES\r
gEdkiiFirmwareManagementProgressProtocolGuid ## PRODUCES\r
+ gEdkiiVariablePolicyProtocolGuid ## CONSUMES\r
\r
[Pcd]\r
gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceStorageAccessEnable ## CONSUMES\r
firmware updates.\r
\r
Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>\r
- Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
static\r
EFI_STATUS\r
LockFmpVariable (\r
- IN EFI_STATUS PreviousStatus,\r
- IN EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock,\r
- IN CHAR16 *VariableName\r
+ IN EFI_STATUS PreviousStatus,\r
+ IN EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy,\r
+ IN CHAR16 *VariableName\r
)\r
{\r
EFI_STATUS Status;\r
\r
- Status = VariableLock->RequestToLock (\r
- VariableLock,\r
- VariableName,\r
- &gEfiCallerIdGuid\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- return PreviousStatus;\r
+ // If success, go ahead and set the policies to protect the target variables.\r
+ Status = RegisterBasicVariablePolicy (VariablePolicy,\r
+ &gEfiCallerIdGuid,\r
+ VariableName,\r
+ VARIABLE_POLICY_NO_MIN_SIZE,\r
+ VARIABLE_POLICY_NO_MAX_SIZE,\r
+ VARIABLE_POLICY_NO_MUST_ATTR,\r
+ VARIABLE_POLICY_NO_CANT_ATTR,\r
+ VARIABLE_POLICY_TYPE_LOCK_NOW);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to lock variable %g %s. Status = %r\n",\r
+ mImageIdName,\r
+ &gEfiCallerIdGuid,\r
+ VariableName,\r
+ Status\r
+ ));\r
}\r
-\r
- DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to lock variable %g %s. Status = %r\n",\r
- mImageIdName,\r
- &gEfiCallerIdGuid,\r
- VariableName,\r
- Status\r
- ));\r
-\r
if (EFI_ERROR (PreviousStatus)) {\r
return PreviousStatus;\r
}\r
FIRMWARE_MANAGEMENT_PRIVATE_DATA *Private\r
)\r
{\r
- EFI_STATUS Status;\r
- EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock;\r
-\r
- VariableLock = NULL;\r
- Status = gBS->LocateProtocol (\r
- &gEdkiiVariableLockProtocolGuid,\r
- NULL,\r
- (VOID **)&VariableLock\r
- );\r
- if (EFI_ERROR (Status) || VariableLock == NULL) {\r
- DEBUG ((DEBUG_ERROR, "FmpDxe(%s): Failed to locate Variable Lock Protocol (%r).\n", mImageIdName, Status));\r
- return EFI_UNSUPPORTED;\r
+ EFI_STATUS Status;\r
+ EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy;\r
+\r
+ // Locate the VariablePolicy protocol.\r
+ Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, (VOID**)&VariablePolicy );\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "FmpDxe %a - Could not locate VariablePolicy protocol! %r\n", __FUNCTION__, Status));\r
+ return Status;\r
}\r
\r
Status = EFI_SUCCESS;\r
- Status = LockFmpVariable (Status, VariableLock, Private->VersionVariableName);\r
- Status = LockFmpVariable (Status, VariableLock, Private->LsvVariableName);\r
- Status = LockFmpVariable (Status, VariableLock, Private->LastAttemptStatusVariableName);\r
- Status = LockFmpVariable (Status, VariableLock, Private->LastAttemptVersionVariableName);\r
- Status = LockFmpVariable (Status, VariableLock, Private->FmpStateVariableName);\r
+ Status = LockFmpVariable (Status, VariablePolicy, Private->VersionVariableName);\r
+ Status = LockFmpVariable (Status, VariablePolicy, Private->LsvVariableName);\r
+ Status = LockFmpVariable (Status, VariablePolicy, Private->LastAttemptStatusVariableName);\r
+ Status = LockFmpVariable (Status, VariablePolicy, Private->LastAttemptVersionVariableName);\r
+ Status = LockFmpVariable (Status, VariablePolicy, Private->FmpStateVariableName);\r
\r
return Status;\r
}\r