]> git.proxmox.com Git - mirror_edk2.git/commitdiff
FmpDevicePkg/FmpDxe: Use new Variable Lock interface
authorYang Jie <jie.yang@intel.com>
Tue, 19 Oct 2021 03:11:04 +0000 (11:11 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 26 Oct 2021 05:19:17 +0000 (05:19 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3655
The code in FmpDevicePkg call the deprecated interface
VariableLockRequestToLockc. So I changed the code in
FmpDevicePkg using RegisterBasicVariablePolicy, instead
of the deprecated interface.

Signed-off-by: Yang Jie <jie.yang@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Guomin Jiang <guomin.jiang@intel.com>
Cc: Wei6 Xu <wei6.xu@intel.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
Reviewed-by: Wei6 Xu <wei6.xu@intel.com>
FmpDevicePkg/FmpDevicePkg.dsc
FmpDevicePkg/FmpDxe/FmpDxe.h
FmpDevicePkg/FmpDxe/FmpDxe.inf
FmpDevicePkg/FmpDxe/VariableSupport.c

index b420f52a08f5d34d086c10af7fd181a579de9d62..7b1af285dd652f54978964f6610124fcffe847c9 100644 (file)
@@ -53,6 +53,7 @@
   DebugLib|MdePkg/Library/UefiDebugLibStdErr/UefiDebugLibStdErr.inf\r
   DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf\r
   PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf\r
+  VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.inf\r
 !ifdef CONTINUOUS_INTEGRATION\r
   BaseCryptLib|CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf\r
 !else\r
index 1177b1828e9ad68af60c6ee908582de445743855..4d94a925b64f805ae1ddfb3cf239572eb545a6f7 100644 (file)
@@ -4,7 +4,7 @@
   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
index eeb904a09148074fe0d2bd7e38fadb71a12bc793..1c296388b0cfc72e8d1624965398e89a2b3d92f6 100644 (file)
@@ -4,7 +4,7 @@
 #  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
index 86dd5b203b73159718128fbc11089fe10d4d09a1..c4b72a2ff9febae89fa97febb9b8a496360ac217 100644 (file)
@@ -3,7 +3,7 @@
   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
@@ -729,29 +729,30 @@ SetLastAttemptVersionInVariable (
 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
@@ -773,26 +774,22 @@ LockAllFmpVariables (
   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