From nobody Wed May 1 21:11:26 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+83373+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+83373+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1636097435; cv=none; d=zohomail.com; s=zohoarc; b=SFbAFfqaEnQJTlIc82KCTFWxEyqmSYItIPPm7U8PwoW/SYol4dOpxcg+TmFphhH1KS8I3eP12YWQ2KdCM3KKFq5PwvYp47Smm2zEEmAGYZoohXq9x4sYYHjTIwkM09JabrxZYdasDTNlkwZd9j1YYusHJzaZ1NDFZHRN0iJV17Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1636097435; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To; bh=Mjjb8qwowF+1ZLOYPFsx/sNVLUO3RSsJ21CY0CnFCp8=; b=dyeec3HoXFx9hJvO2s0mhmCKX9LhKE4LrY/Uf0xTmldEzL1OjVg3ZHAs+JMUw4UrWqUdxxHrp+Xz083j0cQxrv0PvB0w9SpT7AT/GxOKosg/GH3e2acvgOZuQsjgLJzpScuqKscwz1QGnqg3h6YfgzA9p2Z3CTZPVOAh1sT/R1E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+83373+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1636097435700778.4483249852664; Fri, 5 Nov 2021 00:30:35 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id K4VQYY1788612x2kft75apv5; Fri, 05 Nov 2021 00:30:35 -0700 X-Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web12.2335.1636097434589154743 for ; Fri, 05 Nov 2021 00:30:34 -0700 X-IronPort-AV: E=McAfee;i="6200,9189,10158"; a="231702609" X-IronPort-AV: E=Sophos;i="5.87,210,1631602800"; d="scan'208";a="231702609" X-Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Nov 2021 00:30:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,210,1631602800"; d="scan'208";a="542652568" X-Received: from desktop-yang.ccr.corp.intel.com ([10.239.158.131]) by fmsmga008.fm.intel.com with ESMTP; 05 Nov 2021 00:30:30 -0700 From: "Yang Jie" To: devel@edk2.groups.io Cc: jian.j.wang@intel.com, guomin.jiang@intel.com, gaoliming@byosoft.com.cn, Yang Jie Subject: [edk2-devel][PATCH v4] MdeModulePkg/DxeCapsuleLibFmp: Use new Variable Lock interface Date: Fri, 5 Nov 2021 15:30:05 +0800 Message-Id: <20211105073005.1436-1-jie.yang@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,jie.yang@intel.com X-Gm-Message-State: Lfiz63FSHeVp1ibjbywaKNy1x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1636097435; bh=/6AGw/71bX3KvmW34lruW88opkH/mJcJ8izuAh2ssCg=; h=Cc:Date:From:Reply-To:Subject:To; b=frP8twupCzSmKtDN/fsK1IMemvpVbfNfJuqgehW8l6Z24x2mXz0t7Pvos8gaYGbzJ1X hokyW2g0lGBcPzIKuhavOJ1npqVeK1v4nXb+UABvQ2j9Pd40omceJou3dHVHKwQUvIJ8O cH+UCj6PS/jjNwC2RL1TU5oBNbhCsjACYes= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1636097437333100002 Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3699 The code in MdeModulePkg\Library\DxeCapsuleLibFmp call the deprecated=20 interface VariableLockRequestToLock.c. So I changed the code in FmpDevicePkg using RegisterBasicVariablePolicy, instead of the=20 deprecated interface. v4 changes: Fix the typo in "LockVaraible" v3 changes: Fix a format error. v2 changes: Decrease the times of calling gBS->LocateProtocol Signed-off-by: Yang Jie Cc: Guomin Jiang Cc: Liming Gao Cc: Jian J Wang --- .../DxeCapsuleLibFmp/DxeCapsuleLib.inf | 5 +- .../DxeCapsuleLibFmp/DxeCapsuleReportLib.c | 87 +++++++++++++------ 2 files changed, 62 insertions(+), 30 deletions(-) diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf b/MdeM= odulePkg/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.
+# Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -51,6 +51,7 @@ DisplayUpdateProgressLib FileHandleLib UefiBootManagerLib + VariablePolicyHelperLib =20 [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 =20 [Guids] gEfiFmpCapsuleGuid ## SOMETIMES_CONSUMES ## GUID diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c b/= MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c index 0ec5f20676..3b48f81538 100644 --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c @@ -1,14 +1,13 @@ /** @file DXE capsule report related function. =20 - Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.
+ Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent =20 **/ =20 #include #include -#include #include #include #include @@ -26,6 +25,7 @@ #include #include #include +#include =20 #include =20 @@ -94,6 +94,39 @@ GetNewCapsuleResultIndex ( return CurrentIndex + 1; } =20 +/** + 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 LockVariable ( + 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 =3D 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 =3D %r\n", + &VariableGuid, + VariableName, + Status)); + ASSERT_EFI_ERROR (Status); + } +} + /** Write a new capsule status variable. =20 @@ -269,16 +302,17 @@ RecordFmpCapsuleStatusVariable ( =20 /** 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; =20 UnicodeSPrint( CapsuleMaxStr, @@ -297,25 +331,22 @@ InitCapsuleMaxVariable ( ); if (!EFI_ERROR(Status)) { // Lock it per UEFI spec. - Status =3D gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, = (VOID **)&VariableLock); - if (!EFI_ERROR(Status)) { - Status =3D VariableLock->RequestToLock(VariableLock, L"CapsuleMax", = &gEfiCapsuleReportGuid); - ASSERT_EFI_ERROR(Status); - } + LockVariable (gEfiCapsuleReportGuid, L"CapsuleMax", VariablePolicy); } } =20 /** 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 ( } =20 // Lock it in normal boot path per UEFI spec. - Status =3D gBS->LocateProtocol(&gEdkiiVariableLockProtocolGuid, NULL, = (VOID **)&VariableLock); - if (!EFI_ERROR(Status)) { - Status =3D VariableLock->RequestToLock(VariableLock, L"CapsuleLast",= &gEfiCapsuleReportGuid); - ASSERT_EFI_ERROR(Status); - } + LockVariable (gEfiCapsuleReportGuid, L"CapsuleLast", VariablePolicy); } } =20 @@ -430,26 +457,21 @@ InitCapsuleUpdateVariable ( =20 /** 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(); =20 // // Unlock Capsule On Disk relocation Info variable only when Capsule On = Disk flag is enabled // if (!CoDCheckCapsuleOnDiskFlag()) { - Status =3D gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL,= (VOID **) &VariableLock); - if (!EFI_ERROR (Status)) { - Status =3D VariableLock->RequestToLock (VariableLock, COD_RELOCATION= _INFO_VAR_NAME, &gEfiCapsuleVendorGuid); - ASSERT_EFI_ERROR (Status); - } + LockVariable (gEfiCapsuleVendorGuid, COD_RELOCATION_INFO_VAR_NAME, Var= iablePolicy); } } =20 @@ -461,10 +483,19 @@ InitCapsuleVariable ( VOID ) { + EFI_STATUS Status; + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicy; + + // Locate the VariablePolicy protocol + Status =3D gBS->LocateProtocol (&gEdkiiVariablePolicyProtocolGuid, NULL,= (VOID**)&VariablePolicy); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "DxeCapsuleReportLib %a - Could not locate Variab= lePolicy protocol! %r\n", __FUNCTION__, Status)); + ASSERT_EFI_ERROR (Status); + } InitCapsuleUpdateVariable(); - InitCapsuleMaxVariable(); - InitCapsuleLastVariable(); - InitCapsuleRelocationInfo(); + InitCapsuleMaxVariable (VariablePolicy); + InitCapsuleLastVariable (VariablePolicy); + InitCapsuleRelocationInfo (VariablePolicy); =20 // // No need to clear L"Capsule####", because OS/APP should refer L"Capsul= eLast" --=20 2.26.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83373): https://edk2.groups.io/g/devel/message/83373 Mute This Topic: https://groups.io/mt/86835459/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-