]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg: Drop VarLock from RuntimeDxe variable driver
authorBret Barkelew <brbarkel@microsoft.com>
Mon, 9 Nov 2020 06:45:22 +0000 (14:45 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 17 Nov 2020 01:03:43 +0000 (01:03 +0000)
https://bugzilla.tianocore.org/show_bug.cgi?id=2522

Now that everything should be moved to
VariablePolicy, drop support for the
deprecated VarLock SMI interface and
associated functions from variable RuntimeDxe.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Bret Barkelew <brbarkel@microsoft.com>
Signed-off-by: Bret Barkelew <brbarkel@microsoft.com>
Reviewed-by: Dandan Bi <dandan.bi@intel.com>
Acked-by: Jian J Wang <jian.j.wang@intel.com>
MdeModulePkg/Universal/Variable/RuntimeDxe/VarCheck.c
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequestToLock.c [new file with mode: 0644]
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf

index f15219df5eb833013b96ccc079212e90278b44f0..486d85b022e10b80e9b66013ad143e30cc2dcc93 100644 (file)
@@ -3,60 +3,13 @@
   and variable lock protocol based on VarCheckLib.\r
 \r
 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) Microsoft Corporation.\r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include "Variable.h"\r
 \r
-/**\r
-  Mark a variable that will become read-only after leaving the DXE phase of execution.\r
-  Write request coming from SMM environment through EFI_SMM_VARIABLE_PROTOCOL is allowed.\r
-\r
-  @param[in] This          The VARIABLE_LOCK_PROTOCOL instance.\r
-  @param[in] VariableName  A pointer to the variable name that will be made read-only subsequently.\r
-  @param[in] VendorGuid    A pointer to the vendor GUID that will be made read-only subsequently.\r
-\r
-  @retval EFI_SUCCESS           The variable specified by the VariableName and the VendorGuid was marked\r
-                                as pending to be read-only.\r
-  @retval EFI_INVALID_PARAMETER VariableName or VendorGuid is NULL.\r
-                                Or VariableName is an empty string.\r
-  @retval EFI_ACCESS_DENIED     EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has\r
-                                already been signaled.\r
-  @retval EFI_OUT_OF_RESOURCES  There is not enough resource to hold the lock request.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-VariableLockRequestToLock (\r
-  IN CONST EDKII_VARIABLE_LOCK_PROTOCOL *This,\r
-  IN       CHAR16                       *VariableName,\r
-  IN       EFI_GUID                     *VendorGuid\r
-  )\r
-{\r
-  EFI_STATUS                    Status;\r
-  VAR_CHECK_VARIABLE_PROPERTY   Property;\r
-\r
-  AcquireLockOnlyAtBootTime (&mVariableModuleGlobal->VariableGlobal.VariableServicesLock);\r
-\r
-  Status = VarCheckLibVariablePropertyGet (VariableName, VendorGuid, &Property);\r
-  if (!EFI_ERROR (Status)) {\r
-    Property.Property |= VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY;\r
-  } else {\r
-    Property.Revision = VAR_CHECK_VARIABLE_PROPERTY_REVISION;\r
-    Property.Property = VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY;\r
-    Property.Attributes = 0;\r
-    Property.MinSize = 1;\r
-    Property.MaxSize = MAX_UINTN;\r
-  }\r
-  Status = VarCheckLibVariablePropertySet (VariableName, VendorGuid, &Property);\r
-\r
-  DEBUG ((EFI_D_INFO, "[Variable] Lock: %g:%s %r\n", VendorGuid, VariableName, Status));\r
-\r
-  ReleaseLockOnlyAtBootTime (&mVariableModuleGlobal->VariableGlobal.VariableServicesLock);\r
-\r
-  return Status;\r
-}\r
-\r
 /**\r
   Register SetVariable check handler.\r
 \r
diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequestToLock.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequestToLock.c
new file mode 100644 (file)
index 0000000..4aa854a
--- /dev/null
@@ -0,0 +1,71 @@
+/** @file -- VariableLockRequestToLock.c\r
+Temporary location of the RequestToLock shim code while\r
+projects are moved to VariablePolicy. Should be removed when deprecated.\r
+\r
+Copyright (c) Microsoft Corporation.\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include <Uefi.h>\r
+\r
+#include <Library/DebugLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include <Protocol/VariableLock.h>\r
+\r
+#include <Protocol/VariablePolicy.h>\r
+#include <Library/VariablePolicyLib.h>\r
+#include <Library/VariablePolicyHelperLib.h>\r
+\r
+\r
+/**\r
+  DEPRECATED. THIS IS ONLY HERE AS A CONVENIENCE WHILE PORTING.\r
+  Mark a variable that will become read-only after leaving the DXE phase of execution.\r
+  Write request coming from SMM environment through EFI_SMM_VARIABLE_PROTOCOL is allowed.\r
+\r
+  @param[in] This          The VARIABLE_LOCK_PROTOCOL instance.\r
+  @param[in] VariableName  A pointer to the variable name that will be made read-only subsequently.\r
+  @param[in] VendorGuid    A pointer to the vendor GUID that will be made read-only subsequently.\r
+\r
+  @retval EFI_SUCCESS           The variable specified by the VariableName and the VendorGuid was marked\r
+                                as pending to be read-only.\r
+  @retval EFI_INVALID_PARAMETER VariableName or VendorGuid is NULL.\r
+                                Or VariableName is an empty string.\r
+  @retval EFI_ACCESS_DENIED     EFI_END_OF_DXE_EVENT_GROUP_GUID or EFI_EVENT_GROUP_READY_TO_BOOT has\r
+                                already been signaled.\r
+  @retval EFI_OUT_OF_RESOURCES  There is not enough resource to hold the lock request.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+VariableLockRequestToLock (\r
+  IN CONST EDKII_VARIABLE_LOCK_PROTOCOL *This,\r
+  IN       CHAR16                       *VariableName,\r
+  IN       EFI_GUID                     *VendorGuid\r
+  )\r
+{\r
+  EFI_STATUS              Status;\r
+  VARIABLE_POLICY_ENTRY   *NewPolicy;\r
+\r
+  NewPolicy = NULL;\r
+  Status = CreateBasicVariablePolicy( VendorGuid,\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
+                                      &NewPolicy );\r
+  if (!EFI_ERROR( Status )) {\r
+    Status = RegisterVariablePolicy( NewPolicy );\r
+  }\r
+  if (EFI_ERROR( Status )) {\r
+    DEBUG(( DEBUG_ERROR, "%a - Failed to lock variable %s! %r\n", __FUNCTION__, VariableName, Status ));\r
+    ASSERT_EFI_ERROR( Status );\r
+  }\r
+  if (NewPolicy != NULL) {\r
+    FreePool( NewPolicy );\r
+  }\r
+\r
+  return Status;\r
+}\r
index 8debc560e6dc2278cb538bfc0350ae0b9ce9a9d2..c9434df631ee8b0e6a93a6583fb8cbbd7dfd8198 100644 (file)
@@ -49,6 +49,7 @@
   VarCheck.c\r
   VariableExLib.c\r
   SpeculationBarrierDxe.c\r
+  VariableLockRequestToLock.c\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
index bbc8d2080193d6cb9c5d42856af3f2454bebcd1f..eaa97a01c6e5c5b7922c50d886e56375cbd65ec7 100644 (file)
@@ -58,6 +58,7 @@
   VariableExLib.c\r
   TcgMorLockSmm.c\r
   SpeculationBarrierSmm.c\r
+  VariableLockRequestToLock.c\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
index 62f2f9252f438195171641f1907edee8ff8bd7e7..fada0bf3c57f58b2dde8c714bc28aee4758731d2 100644 (file)
@@ -58,6 +58,7 @@
   VariableExLib.c\r
   TcgMorLockSmm.c\r
   SpeculationBarrierSmm.c\r
+  VariableLockRequestToLock.c\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r