.../DxeCapsuleLibFmp/DxeCapsuleLib.inf | 5 +- .../DxeCapsuleLibFmp/DxeCapsuleReportLib.c | 87 +++++++++++++------ 2 files changed, 62 insertions(+), 30 deletions(-)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3699
The code in MdeModulePkg\Library\DxeCapsuleLibFmp call the deprecated
interface VariableLockRequestToLock.c. So I changed the code in
FmpDevicePkg using RegisterBasicVariablePolicy, instead of the
deprecated interface.
Signed-off-by: Yang Jie <jie.yang@intel.com>
Cc: Guomin Jiang <guomin.jiang@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Jian J Wang <jian.j.wang@intel.com>
---
.../DxeCapsuleLibFmp/DxeCapsuleLib.inf | 5 +-
.../DxeCapsuleLibFmp/DxeCapsuleReportLib.c | 87 +++++++++++++------
2 files changed, 62 insertions(+), 30 deletions(-)
diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
index 05de4299fb..9212c81d68 100644
--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
@@ -3,7 +3,7 @@
#
# Capsule library instance for DXE_DRIVER module types.
#
-# Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -51,6 +51,7 @@
DisplayUpdateProgressLib
FileHandleLib
UefiBootManagerLib
+ VariablePolicyHelperLib
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdCapsuleMax ## CONSUMES
@@ -71,11 +72,11 @@
[Protocols]
gEsrtManagementProtocolGuid ## CONSUMES
gEfiFirmwareManagementProtocolGuid ## CONSUMES
- gEdkiiVariableLockProtocolGuid ## SOMETIMES_CONSUMES
gEdkiiFirmwareManagementProgressProtocolGuid ## SOMETIMES_CONSUMES
gEfiSimpleFileSystemProtocolGuid ## SOMETIMES_CONSUMES
gEfiBlockIoProtocolGuid ## CONSUMES
gEfiDiskIoProtocolGuid ## CONSUMES
+ gEdkiiVariablePolicyProtocolGuid ## CONSUMES
[Guids]
gEfiFmpCapsuleGuid ## SOMETIMES_CONSUMES ## GUID
diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
index 0ec5f20676..d90f131879 100644
--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
@@ -1,14 +1,13 @@
/** @file
DXE capsule report related function.
- Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <PiDxe.h>
#include <Protocol/FirmwareManagement.h>
-#include <Protocol/VariableLock.h>
#include <Guid/CapsuleReport.h>
#include <Guid/FmpCapsule.h>
#include <Guid/CapsuleVendor.h>
@@ -26,6 +25,7 @@
#include <Library/ReportStatusCodeLib.h>
#include <Library/DevicePathLib.h>
#include <Library/CapsuleLib.h>
+#include <Library/VariablePolicyHelperLib.h>
#include <IndustryStandard/WindowsUxCapsule.h>
@@ -94,6 +94,39 @@ GetNewCapsuleResultIndex (
return CurrentIndex + 1;
}
+/**
+ Lock Variable by variable policy
+
+ @param[in] VariableGuid The Guid of the variable to be locked
+ @param[in] VariableName The name of the variable to be locked
+ @param[in] VariablePolicy The pointer of variable lock policy
+**/
+VOID LockVaraible (
+ IN CONST EFI_GUID VariableGuid,
+ IN CHAR16 *VariableName,
+ IN EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
+ )
+{
+ EFI_STATUS Status;
+
+ // Set the policies to protect the target variables
+ Status = RegisterBasicVariablePolicy (VariablePolicy,
+ &VariableGuid,
+ VariableName,
+ VARIABLE_POLICY_NO_MIN_SIZE,
+ VARIABLE_POLICY_NO_MAX_SIZE,
+ VARIABLE_POLICY_NO_MUST_ATTR,
+ VARIABLE_POLICY_NO_CANT_ATTR,
+ VARIABLE_POLICY_TYPE_LOCK_NOW);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "DxeCapsuleLibFmp: Failed to lock variable %g %s. Status = %r\n",
+ &VariableGuid,
+ VariableName,
+ Status));
+ ASSERT_EFI_ERROR (Status);
+ }
+}
+
/**
Write a new capsule status variable.
@@ -269,16 +302,17 @@ RecordFmpCapsuleStatusVariable (
/**
Initialize CapsuleMax variables.
+
+ @param[in] VariablePolicy The pointer of variable lock policy
**/
VOID
InitCapsuleMaxVariable (
- VOID
+ EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
)
{
EFI_STATUS Status;
UINTN Size;
CHAR16 CapsuleMaxStr[sizeof("Capsule####")];
- EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock;
UnicodeSPrint(
CapsuleMaxStr,
@@ -297,25 +331,22 @@ InitCapsuleMaxVariable (
);
if (!EFI_ERROR(Status)) {
// Lock it per UEFI spec.
- Status = gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, (VOID **)&VariableLock);
- if (!EFI_ERROR(Status)) {
- Status = VariableLock->RequestToLock(VariableLock, L"CapsuleMax", &gEfiCapsuleReportGuid);
- ASSERT_EFI_ERROR(Status);
- }
+ LockVaraible (gEfiCapsuleReportGuid, L"CapsuleMax", VariablePolicy);
}
}
/**
Initialize CapsuleLast variables.
+
+ @param[in] VariablePolicy The pointer of variable lock policy
**/
VOID
InitCapsuleLastVariable (
- VOID
+ EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
)
{
EFI_STATUS Status;
EFI_BOOT_MODE BootMode;
- EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock;
VOID *CapsuleResult;
UINTN Size;
CHAR16 CapsuleLastStr[sizeof("Capsule####")];
@@ -372,11 +403,7 @@ InitCapsuleLastVariable (
}
// Lock it in normal boot path per UEFI spec.
- Status = gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, (VOID **)&VariableLock);
- if (!EFI_ERROR(Status)) {
- Status = VariableLock->RequestToLock(VariableLock, L"CapsuleLast", &gEfiCapsuleReportGuid);
- ASSERT_EFI_ERROR(Status);
- }
+ LockVaraible (gEfiCapsuleReportGuid, L"CapsuleLast", VariablePolicy);
}
}
@@ -430,26 +457,21 @@ InitCapsuleUpdateVariable (
/**
Initialize capsule relocation info variable.
+
+ @param[in] VariablePolicy The pointer of variable lock policy
**/
VOID
InitCapsuleRelocationInfo (
- VOID
+ EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy
)
{
- EFI_STATUS Status;
- EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock;
-
CoDClearCapsuleRelocationInfo();
//
// Unlock Capsule On Disk relocation Info variable only when Capsule On Disk flag is enabled
//
if (!CoDCheckCapsuleOnDiskFlag()) {
- Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, (VOID **) &VariableLock);
- if (!EFI_ERROR (Status)) {
- Status = VariableLock->RequestToLock (VariableLock, COD_RELOCATION_INFO_VAR_NAME, &gEfiCapsuleVendorGuid);
- ASSERT_EFI_ERROR (Status);
- }
+ LockVaraible (gEfiCapsuleVendorGuid, COD_RELOCATION_INFO_VAR_NAME, VariablePolicy);
}
}
@@ -461,10 +483,19 @@ InitCapsuleVariable (
VOID
)
{
+ EFI_STATUS Status;
+ EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy;
+
+ // Locate the VariablePolicy protocol
+ Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, (VOID**)&VariablePolicy);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "DxeCapsuleReportLib %a - Could not locate VariablePolicy protocol! %r\n", __FUNCTION__, Status));
+ ASSERT_EFI_ERROR (Status);
+ }
InitCapsuleUpdateVariable();
- InitCapsuleMaxVariable();
- InitCapsuleLastVariable();
- InitCapsuleRelocationInfo();
+ InitCapsuleMaxVariable (VariablePolicy);
+ InitCapsuleLastVariable (VariablePolicy);
+ InitCapsuleRelocationInfo (VariablePolicy);
//
// No need to clear L"Capsule####", because OS/APP should refer L"CapsuleLast"
--
2.26.2.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#82904): https://edk2.groups.io/g/devel/message/82904
Mute This Topic: https://groups.io/mt/86669161/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn> > -----邮件原件----- > 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Yang Jie > 发送时间: 2021年10月29日 11:10 > 收件人: devel@edk2.groups.io > 抄送: jian.j.wang@intel.com; guomin.jiang@intel.com; > gaoliming@byosoft.com.cn; Yang Jie <jie.yang@intel.com> > 主题: [edk2-devel][PATCH v4] MdeModulePkg/DxeCapsuleLibFmp: Use new > Variable Lock interface > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3699 > The code in MdeModulePkg\Library\DxeCapsuleLibFmp call the deprecated > interface VariableLockRequestToLock.c. So I changed the code in > FmpDevicePkg using RegisterBasicVariablePolicy, instead of the > deprecated interface. > > Signed-off-by: Yang Jie <jie.yang@intel.com> > Cc: Guomin Jiang <guomin.jiang@intel.com> > Cc: Liming Gao <gaoliming@byosoft.com.cn> > Cc: Jian J Wang <jian.j.wang@intel.com> > --- > .../DxeCapsuleLibFmp/DxeCapsuleLib.inf | 5 +- > .../DxeCapsuleLibFmp/DxeCapsuleReportLib.c | 87 > +++++++++++++------ > 2 files changed, 62 insertions(+), 30 deletions(-) > > diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > index 05de4299fb..9212c81d68 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > @@ -3,7 +3,7 @@ > # > > # Capsule library instance for DXE_DRIVER module types. > > # > > -# Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR> > > +# Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.<BR> > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > ## > > @@ -51,6 +51,7 @@ > DisplayUpdateProgressLib > > FileHandleLib > > UefiBootManagerLib > > + VariablePolicyHelperLib > > > > [Pcd] > > gEfiMdeModulePkgTokenSpaceGuid.PcdCapsuleMax > ## CONSUMES > > @@ -71,11 +72,11 @@ > [Protocols] > > gEsrtManagementProtocolGuid ## CONSUMES > > gEfiFirmwareManagementProtocolGuid ## CONSUMES > > - gEdkiiVariableLockProtocolGuid ## > SOMETIMES_CONSUMES > > gEdkiiFirmwareManagementProgressProtocolGuid ## > SOMETIMES_CONSUMES > > gEfiSimpleFileSystemProtocolGuid ## > SOMETIMES_CONSUMES > > gEfiBlockIoProtocolGuid ## CONSUMES > > gEfiDiskIoProtocolGuid ## CONSUMES > > + gEdkiiVariablePolicyProtocolGuid ## CONSUMES > > > > [Guids] > > gEfiFmpCapsuleGuid ## > SOMETIMES_CONSUMES ## GUID > > diff --git > a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > index 0ec5f20676..d90f131879 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > @@ -1,14 +1,13 @@ > /** @file > > DXE capsule report related function. > > > > - Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR> > > + Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.<BR> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > > > #include <PiDxe.h> > > #include <Protocol/FirmwareManagement.h> > > -#include <Protocol/VariableLock.h> > > #include <Guid/CapsuleReport.h> > > #include <Guid/FmpCapsule.h> > > #include <Guid/CapsuleVendor.h> > > @@ -26,6 +25,7 @@ > #include <Library/ReportStatusCodeLib.h> > > #include <Library/DevicePathLib.h> > > #include <Library/CapsuleLib.h> > > +#include <Library/VariablePolicyHelperLib.h> > > > > #include <IndustryStandard/WindowsUxCapsule.h> > > > > @@ -94,6 +94,39 @@ GetNewCapsuleResultIndex ( > return CurrentIndex + 1; > > } > > > > +/** > > + Lock Variable by variable policy > > + > > + @param[in] VariableGuid The Guid of the variable to be locked > > + @param[in] VariableName The name of the variable to be > locked > > + @param[in] VariablePolicy The pointer of variable lock policy > > +**/ > > +VOID LockVaraible ( > > + IN CONST EFI_GUID VariableGuid, > > + IN CHAR16 *VariableName, > > + IN EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > > + ) > > +{ > > + EFI_STATUS Status; > > + > > + // Set the policies to protect the target variables > > + Status = RegisterBasicVariablePolicy (VariablePolicy, > > + &VariableGuid, > > + VariableName, > > + > VARIABLE_POLICY_NO_MIN_SIZE, > > + > VARIABLE_POLICY_NO_MAX_SIZE, > > + > VARIABLE_POLICY_NO_MUST_ATTR, > > + > VARIABLE_POLICY_NO_CANT_ATTR, > > + > VARIABLE_POLICY_TYPE_LOCK_NOW); > > + if (EFI_ERROR (Status)) { > > + DEBUG ((DEBUG_ERROR, "DxeCapsuleLibFmp: Failed to lock > variable %g %s. Status = %r\n", > > + &VariableGuid, > > + VariableName, > > + Status)); > > + ASSERT_EFI_ERROR (Status); > > + } > > +} > > + > > /** > > Write a new capsule status variable. > > > > @@ -269,16 +302,17 @@ RecordFmpCapsuleStatusVariable ( > > > /** > > Initialize CapsuleMax variables. > > + > > + @param[in] VariablePolicy The pointer of variable lock policy > > **/ > > VOID > > InitCapsuleMaxVariable ( > > - VOID > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > > ) > > { > > EFI_STATUS Status; > > UINTN Size; > > CHAR16 > CapsuleMaxStr[sizeof("Capsule####")]; > > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > > > > UnicodeSPrint( > > CapsuleMaxStr, > > @@ -297,25 +331,22 @@ InitCapsuleMaxVariable ( > ); > > if (!EFI_ERROR(Status)) { > > // Lock it per UEFI spec. > > - Status = gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **)&VariableLock); > > - if (!EFI_ERROR(Status)) { > > - Status = VariableLock->RequestToLock(VariableLock, L"CapsuleMax", > &gEfiCapsuleReportGuid); > > - ASSERT_EFI_ERROR(Status); > > - } > > + LockVaraible (gEfiCapsuleReportGuid, L"CapsuleMax", VariablePolicy); > > } > > } > > > > /** > > Initialize CapsuleLast variables. > > + > > + @param[in] VariablePolicy The pointer of variable lock policy > > **/ > > VOID > > InitCapsuleLastVariable ( > > - VOID > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > > ) > > { > > EFI_STATUS Status; > > EFI_BOOT_MODE BootMode; > > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > > VOID *CapsuleResult; > > UINTN Size; > > CHAR16 > CapsuleLastStr[sizeof("Capsule####")]; > > @@ -372,11 +403,7 @@ InitCapsuleLastVariable ( > } > > > > // Lock it in normal boot path per UEFI spec. > > - Status = gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **)&VariableLock); > > - if (!EFI_ERROR(Status)) { > > - Status = VariableLock->RequestToLock(VariableLock, L"CapsuleLast", > &gEfiCapsuleReportGuid); > > - ASSERT_EFI_ERROR(Status); > > - } > > + LockVaraible (gEfiCapsuleReportGuid, L"CapsuleLast", VariablePolicy); > > } > > } > > > > @@ -430,26 +457,21 @@ InitCapsuleUpdateVariable ( > > > /** > > Initialize capsule relocation info variable. > > + > > + @param[in] VariablePolicy The pointer of variable lock policy > > **/ > > VOID > > InitCapsuleRelocationInfo ( > > - VOID > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > > ) > > { > > - EFI_STATUS Status; > > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > > - > > CoDClearCapsuleRelocationInfo(); > > > > // > > // Unlock Capsule On Disk relocation Info variable only when Capsule On > Disk flag is enabled > > // > > if (!CoDCheckCapsuleOnDiskFlag()) { > > - Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **) &VariableLock); > > - if (!EFI_ERROR (Status)) { > > - Status = VariableLock->RequestToLock (VariableLock, > COD_RELOCATION_INFO_VAR_NAME, &gEfiCapsuleVendorGuid); > > - ASSERT_EFI_ERROR (Status); > > - } > > + LockVaraible (gEfiCapsuleVendorGuid, > COD_RELOCATION_INFO_VAR_NAME, VariablePolicy); > > } > > } > > > > @@ -461,10 +483,19 @@ InitCapsuleVariable ( > VOID > > ) > > { > > + EFI_STATUS Status; > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy; > > + > > + // Locate the VariablePolicy protocol > > + Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, > (VOID**)&VariablePolicy); > > + if (EFI_ERROR (Status)) { > > + DEBUG ((DEBUG_ERROR, "DxeCapsuleReportLib %a - Could not locate > VariablePolicy protocol! %r\n", __FUNCTION__, Status)); > > + ASSERT_EFI_ERROR (Status); > > + } > > InitCapsuleUpdateVariable(); > > - InitCapsuleMaxVariable(); > > - InitCapsuleLastVariable(); > > - InitCapsuleRelocationInfo(); > > + InitCapsuleMaxVariable (VariablePolicy); > > + InitCapsuleLastVariable (VariablePolicy); > > + InitCapsuleRelocationInfo (VariablePolicy); > > > > // > > // No need to clear L"Capsule####", because OS/APP should refer > L"CapsuleLast" > > -- > 2.26.2.windows.1 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#82904): https://edk2.groups.io/g/devel/message/82904 > Mute This Topic: https://groups.io/mt/86669161/4905953 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub > [gaoliming@byosoft.com.cn] > -=-=-=-=-=-= > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83077): https://edk2.groups.io/g/devel/message/83077 Mute This Topic: https://groups.io/mt/86757636/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
Just a format issue (see inline comment). With it addressed, Reviewed-by: Jian J Wang <jian.j.wang@intel.com> Regards, Jian > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Yang Jie > Sent: Friday, October 29, 2021 11:10 AM > To: devel@edk2.groups.io > Cc: Wang, Jian J <jian.j.wang@intel.com>; Jiang, Guomin > <guomin.jiang@intel.com>; gaoliming@byosoft.com.cn; Yang, Jie > <jie.yang@intel.com> > Subject: [edk2-devel][PATCH v4] MdeModulePkg/DxeCapsuleLibFmp: Use new > Variable Lock interface > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3699 > The code in MdeModulePkg\Library\DxeCapsuleLibFmp call the deprecated > interface VariableLockRequestToLock.c. So I changed the code in > FmpDevicePkg using RegisterBasicVariablePolicy, instead of the > deprecated interface. > > Signed-off-by: Yang Jie <jie.yang@intel.com> > Cc: Guomin Jiang <guomin.jiang@intel.com> > Cc: Liming Gao <gaoliming@byosoft.com.cn> > Cc: Jian J Wang <jian.j.wang@intel.com> > --- > .../DxeCapsuleLibFmp/DxeCapsuleLib.inf | 5 +- > .../DxeCapsuleLibFmp/DxeCapsuleReportLib.c | 87 +++++++++++++------ > 2 files changed, 62 insertions(+), 30 deletions(-) > > diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > index 05de4299fb..9212c81d68 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf > @@ -3,7 +3,7 @@ > # > > # Capsule library instance for DXE_DRIVER module types. > > # > > -# Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR> > > +# Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.<BR> > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > ## > > @@ -51,6 +51,7 @@ > DisplayUpdateProgressLib > > FileHandleLib > > UefiBootManagerLib > > + VariablePolicyHelperLib > > > > [Pcd] > > gEfiMdeModulePkgTokenSpaceGuid.PcdCapsuleMax ## > CONSUMES > > @@ -71,11 +72,11 @@ > [Protocols] > > gEsrtManagementProtocolGuid ## CONSUMES > > gEfiFirmwareManagementProtocolGuid ## CONSUMES > > - gEdkiiVariableLockProtocolGuid ## SOMETIMES_CONSUMES > > gEdkiiFirmwareManagementProgressProtocolGuid ## > SOMETIMES_CONSUMES > > gEfiSimpleFileSystemProtocolGuid ## SOMETIMES_CONSUMES > > gEfiBlockIoProtocolGuid ## CONSUMES > > gEfiDiskIoProtocolGuid ## CONSUMES > > + gEdkiiVariablePolicyProtocolGuid ## CONSUMES > > > > [Guids] > > gEfiFmpCapsuleGuid ## SOMETIMES_CONSUMES ## GUID > > diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > index 0ec5f20676..d90f131879 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > @@ -1,14 +1,13 @@ > /** @file > > DXE capsule report related function. > > > > - Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR> > > + Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.<BR> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > > > #include <PiDxe.h> > > #include <Protocol/FirmwareManagement.h> > > -#include <Protocol/VariableLock.h> > > #include <Guid/CapsuleReport.h> > > #include <Guid/FmpCapsule.h> > > #include <Guid/CapsuleVendor.h> > > @@ -26,6 +25,7 @@ > #include <Library/ReportStatusCodeLib.h> > > #include <Library/DevicePathLib.h> > > #include <Library/CapsuleLib.h> > > +#include <Library/VariablePolicyHelperLib.h> > > > > #include <IndustryStandard/WindowsUxCapsule.h> > > > > @@ -94,6 +94,39 @@ GetNewCapsuleResultIndex ( > return CurrentIndex + 1; > > } > > > > +/** > > + Lock Variable by variable policy > > + > > + @param[in] VariableGuid The Guid of the variable to be locked > > + @param[in] VariableName The name of the variable to be locked > > + @param[in] VariablePolicy The pointer of variable lock policy > > +**/ > > +VOID LockVaraible ( > > + IN CONST EFI_GUID VariableGuid, > > + IN CHAR16 *VariableName, > > + IN EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > The alignment in above lines are not correct (four spaces, should be two spaces here). > + ) > > +{ > > + EFI_STATUS Status; > > + > > + // Set the policies to protect the target variables > > + Status = RegisterBasicVariablePolicy (VariablePolicy, > > + &VariableGuid, > > + VariableName, > > + VARIABLE_POLICY_NO_MIN_SIZE, > > + VARIABLE_POLICY_NO_MAX_SIZE, > > + VARIABLE_POLICY_NO_MUST_ATTR, > > + VARIABLE_POLICY_NO_CANT_ATTR, > > + VARIABLE_POLICY_TYPE_LOCK_NOW); > > + if (EFI_ERROR (Status)) { > > + DEBUG ((DEBUG_ERROR, "DxeCapsuleLibFmp: Failed to lock variable %g %s. > Status = %r\n", > > + &VariableGuid, > > + VariableName, > > + Status)); > > + ASSERT_EFI_ERROR (Status); > > + } > > +} > > + > > /** > > Write a new capsule status variable. > > > > @@ -269,16 +302,17 @@ RecordFmpCapsuleStatusVariable ( > > > /** > > Initialize CapsuleMax variables. > > + > > + @param[in] VariablePolicy The pointer of variable lock policy > > **/ > > VOID > > InitCapsuleMaxVariable ( > > - VOID > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > > ) > > { > > EFI_STATUS Status; > > UINTN Size; > > CHAR16 CapsuleMaxStr[sizeof("Capsule####")]; > > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > > > > UnicodeSPrint( > > CapsuleMaxStr, > > @@ -297,25 +331,22 @@ InitCapsuleMaxVariable ( > ); > > if (!EFI_ERROR(Status)) { > > // Lock it per UEFI spec. > > - Status = gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **)&VariableLock); > > - if (!EFI_ERROR(Status)) { > > - Status = VariableLock->RequestToLock(VariableLock, L"CapsuleMax", > &gEfiCapsuleReportGuid); > > - ASSERT_EFI_ERROR(Status); > > - } > > + LockVaraible (gEfiCapsuleReportGuid, L"CapsuleMax", VariablePolicy); > > } > > } > > > > /** > > Initialize CapsuleLast variables. > > + > > + @param[in] VariablePolicy The pointer of variable lock policy > > **/ > > VOID > > InitCapsuleLastVariable ( > > - VOID > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > > ) > > { > > EFI_STATUS Status; > > EFI_BOOT_MODE BootMode; > > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > > VOID *CapsuleResult; > > UINTN Size; > > CHAR16 CapsuleLastStr[sizeof("Capsule####")]; > > @@ -372,11 +403,7 @@ InitCapsuleLastVariable ( > } > > > > // Lock it in normal boot path per UEFI spec. > > - Status = gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **)&VariableLock); > > - if (!EFI_ERROR(Status)) { > > - Status = VariableLock->RequestToLock(VariableLock, L"CapsuleLast", > &gEfiCapsuleReportGuid); > > - ASSERT_EFI_ERROR(Status); > > - } > > + LockVaraible (gEfiCapsuleReportGuid, L"CapsuleLast", VariablePolicy); > > } > > } > > > > @@ -430,26 +457,21 @@ InitCapsuleUpdateVariable ( > > > /** > > Initialize capsule relocation info variable. > > + > > + @param[in] VariablePolicy The pointer of variable lock policy > > **/ > > VOID > > InitCapsuleRelocationInfo ( > > - VOID > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy > > ) > > { > > - EFI_STATUS Status; > > - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > > - > > CoDClearCapsuleRelocationInfo(); > > > > // > > // Unlock Capsule On Disk relocation Info variable only when Capsule On Disk > flag is enabled > > // > > if (!CoDCheckCapsuleOnDiskFlag()) { > > - Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, > (VOID **) &VariableLock); > > - if (!EFI_ERROR (Status)) { > > - Status = VariableLock->RequestToLock (VariableLock, > COD_RELOCATION_INFO_VAR_NAME, &gEfiCapsuleVendorGuid); > > - ASSERT_EFI_ERROR (Status); > > - } > > + LockVaraible (gEfiCapsuleVendorGuid, COD_RELOCATION_INFO_VAR_NAME, > VariablePolicy); > > } > > } > > > > @@ -461,10 +483,19 @@ InitCapsuleVariable ( > VOID > > ) > > { > > + EFI_STATUS Status; > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy; > > + > > + // Locate the VariablePolicy protocol > > + Status = gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL, > (VOID**)&VariablePolicy); > > + if (EFI_ERROR (Status)) { > > + DEBUG ((DEBUG_ERROR, "DxeCapsuleReportLib %a - Could not locate > VariablePolicy protocol! %r\n", __FUNCTION__, Status)); > > + ASSERT_EFI_ERROR (Status); > > + } > > InitCapsuleUpdateVariable(); > > - InitCapsuleMaxVariable(); > > - InitCapsuleLastVariable(); > > - InitCapsuleRelocationInfo(); > > + InitCapsuleMaxVariable (VariablePolicy); > > + InitCapsuleLastVariable (VariablePolicy); > > + InitCapsuleRelocationInfo (VariablePolicy); > > > > // > > // No need to clear L"Capsule####", because OS/APP should refer > L"CapsuleLast" > > -- > 2.26.2.windows.1 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#82904): https://edk2.groups.io/g/devel/message/82904 > Mute This Topic: https://groups.io/mt/86669161/1768734 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [jian.j.wang@intel.com] > -=-=-=-=-=-= > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83090): https://edk2.groups.io/g/devel/message/83090 Mute This Topic: https://groups.io/mt/86669161/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.