From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (NAM12-DM6-obe.outbound.protection.outlook.com [40.107.243.138]) by mx.groups.io with SMTP id smtpd.web11.60495.1597728292184076496 for ; Mon, 17 Aug 2020 22:24:52 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=e7PHFGV0; spf=pass (domain: microsoft.com, ip: 40.107.243.138, mailfrom: bret.barkelew@microsoft.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bYsQJqNKXIBNg1dR/dSUCvNIVo7qYe5jaakG0mhRFs56wSEqsD7xiKQtkt0Bpzt0cxR02e3XOnnpw+WyGeaMdeQXUep5yWEj0uX6Jol8wpWaKWfjIUYJsZMBJQBxkx1PCDvqA67So92txDoIjuaC82XvVZ9VAfN7d/LW/nK9tRSOMGJ4TBw0ptlzqHVqe3hZ1k/nItlcfXUNtOXAGq2yHTxZ4tTN/FDuIxezaAXxTQZaD/FXGOnjWZDvklLvK7L2R9cHcFvJE3o8s2JxqUl0ZhoU1h/WC3QbWvWuloOLmlpHvDY4DI39jGXJFx2ZRx0nDBVcUq6jRQcd3HG7OJ+J0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DWtswJOLedDkoWgpcBZkzEUnr4LfDCTzb+t1VKiORuA=; b=R6hHpf75T76EStmNYt0amUtnEiEuXYeDVFDkfzL2I+dK9D6vWi855zTiPpGp+oYF8Zug19PYy8DEtmH+dZRttq95XzIAOfTcxYMLPsGOEcsyo8c1OdbssMghRT1nTj7MS8Uy/t/2go4xlgzrzZpH7eJgil5pCDrpkzwZ/vJ/vPIBYGaO5+tGG0Tw9DXGWd97uw/QaDR65etrj2RJpLh96xFpj0RFZwAsdl0pxrsp2nZVFA53hRMD2jbGmn6/9bwOeMnOfgONM9s2E9zeNB6J17L5nc8O0sphFFeLqJfhoVqy4vDpxFYFdBwX1RfzI/VrrvXyq9McjBxW7v0d5Q69ZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DWtswJOLedDkoWgpcBZkzEUnr4LfDCTzb+t1VKiORuA=; b=e7PHFGV0FCKxSgY5IUOykJ7DC3oS4i4u6CcDf7s7Ztdd63Rye/Z7NzlYPpTz9XkJstw7hqc8G3ooazG63QXV7QOGL6sXLw2ZWPiL97qFdifbL2Avf//7ngfg2QIDHayudtfxXctzFaeoFRuz0aALToQmC78S+jsuuqn3VBCWt5k= Received: from CY4PR21MB0743.namprd21.prod.outlook.com (2603:10b6:903:b2::9) by CY4PR21MB0839.namprd21.prod.outlook.com (2603:10b6:903:b9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3305.10; Tue, 18 Aug 2020 05:24:43 +0000 Received: from CY4PR21MB0743.namprd21.prod.outlook.com ([fe80::2ca0:7d3e:e918:c47a]) by CY4PR21MB0743.namprd21.prod.outlook.com ([fe80::2ca0:7d3e:e918:c47a%12]) with mapi id 15.20.3305.024; Tue, 18 Aug 2020 05:24:43 +0000 From: "Bret Barkelew" To: "devel@edk2.groups.io" , "dandan.bi@intel.com" , "bret@corthon.com" CC: "Yao, Jiewen" , "Zhang, Chao B" , "Wang, Jian J" , "Wu, Hao A" , liming.gao , "Justen, Jordan L" , Laszlo Ersek , Ard Biesheuvel , Andrew Fish , "Ni, Ray" Subject: Re: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy feature Thread-Topic: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy feature Thread-Index: AQHWb+ajRo9nfLY8FE2W5PdyDMQ7iKk9XDHe Date: Tue, 18 Aug 2020 05:24:43 +0000 Message-ID: References: <20200623064104.1908-1-brbarkel@microsoft.com> <161DCDB779DB4B3C.30988@groups.io>, In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2020-08-18T05:11:14.6996961Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Privileged authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=microsoft.com; x-originating-ip: [174.21.132.206] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 51d4e26c-ef48-41d0-38b4-08d8433703be x-ms-traffictypediagnostic: CY4PR21MB0839: x-ld-processed: 72f988bf-86f1-41af-91ab-2d7cd011db47,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 0y8qKqVE4/8MspdG96PiXNES+A55zFlshPk9A7hCDv2RI5ASz8/gjzApYlOF+WMYbvoHswlY1lPAIKnfW+fLpwDnRdHX1fdIaI4XN6/uushBHX/bSL3KsWCdvI/Hhe13FmRhPBL6H8G0h6SioDxt5w+fXxgOxKMJT7RDwBmMgGsXuDQ3Ay4Vw63K4N8jRclefCiVZNjzPy0Aw76YcjE6hE4YwVi6Azck2Mjyx+n9kJ4t7YMH3jQFPAyHBBU1sZF1AmrmooLnYmafwXSAXPCRzhIKCdYB6RR+Zf6CSB/ntbFc32Hcr/uWDsyOBUJch1W3sAH+BHoDv7aj2cOKzQ+t6XPdRXMCxuI+yHt3mLMK4F9H5TnRkOYNeb7Z6ECxQoU1FxWCRbWkR8NO/pT1bK4eQA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR21MB0743.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(136003)(39860400002)(396003)(366004)(52536014)(71200400001)(54906003)(166002)(66946007)(82950400001)(82960400001)(86362001)(7416002)(316002)(76116006)(30864003)(66556008)(55016002)(66476007)(7696005)(8990500004)(64756008)(110136005)(966005)(66446008)(186003)(33656002)(478600001)(26005)(53546011)(10290500003)(6506007)(9686003)(8936002)(83380400001)(5660300002)(8676002)(2906002)(4326008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: HmtTTMUOS3j4QThuMKa1oQbEKHh9WJgaS6EnL9M0fpZ1QGymfTgeg9l9nnuPtSMl95A5TjPLP9scvUkvxXRQ8xX3WDEf1emPmaXgOy9C79vKiCsbMH1DJQkadCzzJRo2b0Hc5/vBGh4a6P40vJWL/0m1dUDXiPy8bkWg9RUPvJp65zO+HupQSkbHh4sd/v/BfND+m94wrWqeHqWxMkNMjIHnVl5tMnLvwx5WcM9y3Ts4KOerjRewWWWq3d+irZk5/pOWs5PnxSY50TeGbCY0cOXa/nYJyRfSXK+07ZZk6fBkOeFBuyfi6QuI5YfGTsyFNnQzur+lK2PH8Lob5NrX220CYF4B1b9S3rBP5qsFikozMMEHjzNhbzWwYEw65oJ4eVlfKZbTlg85ywKPF/c7lH2yESBnohk+0OrTYH1HFCkeUwVAfORsrrQ9j/JBGr0+wFNKSzxYsrxtfwmdO1yaxnnOfNIg3Fq36LZTSzfj9P9Uh9EtIp9izgXoljQ6t7R25CAhsWIu2P2PWczQ9WL1sJhsR5h2hhTwjtuJrJMJKWi48RrKhbayoLIbnmeRIdQZpDolY/0/gbKH8cAe0Wq47+E8PlY7By4sUPdY8pZm/dCRPs5Th14wPhgyA4SFoww6r3BvFDddrT6iYMUArQShQA== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR21MB0743.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 51d4e26c-ef48-41d0-38b4-08d8433703be X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Aug 2020 05:24:43.6736 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Peu3AjHwL2JCeUdzqCjcWwJEyY51kmbj2IEq5lhK/ebNQJSImkin4YLLiBYY+0lECoDWPEyKouY7GG1gyDFzIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR21MB0839 Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_CY4PR21MB0743D653B93AE9CA81D06D4DEF5C0CY4PR21MB0743namp_" --_000_CY4PR21MB0743D653B93AE9CA81D06D4DEF5C0CY4PR21MB0743namp_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Responses below=85 - Bret From: Dandan Bi via groups.io Sent: Tuesday, August 11, 2020 6:52 AM To: devel@edk2.groups.io; Bi, Dandan; bret@corthon.com Cc: Yao, Jiewen; Zhang, Chao B; Wang, Jian J; Wu, Hao A; liming.gao; Justen, J= ordan L; Laszlo Ersek; Ard Biesheuvel; Andrew Fish; Ni, Ray Subject: [EXTERNAL] Re: [edk2-devel] [PATCH v6 00/14] Add the VariablePoli= cy feature Hi Bret, Sorry for the delayed response. Some more comments here: 1. Currently I see the LockVaribePolicy is called at ReadyToBoot by variab= le driver, could we update it to be called at EndOfDxe? We should prevent m= alicious code registering policy after EndOfDxe for security concern. And c= ould we also add the test case to check the variable policy is locked at En= dofDxe? We could. Right now it=92s at ReadyToBoot because it=92s just there as a s= afety net and the platform could lock it earlier. Would it work to have a P= CD for which EventGroup GUID the platform should lock on? 2. For patch 4, the SMM communication, some general guidelines for SMI ha= ndler: a) Check whether the communication buffer is outside SMM and valid. For this feature, please double check whether the communication buffer is = checked, if all the range in communication buffer has already been checked = within existing edk2 core infrastructure, please also add the comments in t= he code to mention that it has been checked. I checked this, but I will recheck (since there=92ve been a few revisions = in the patches) and update the comments. b) Should copy the communication buffer to SMRAM before checking the data = fields to avoid TOC/TOU attac For this feature, for example, when dump variable policy, if malicious cod= e updates the DumpParams->TotalSize in communication buffer to smaller one = to allocate the PaginationCache buffer, and then update it the correct one = and dump the variable policy data into the PaginationCache buffer, it will = cause buffer overflow in this case. So please double check the code and co= py the communication buffer into SMRAM to avoid such kind issue. Will also check for this. 3. Did you do any security test for this feature? Such as? There are both unit tests and integration tests to ensure correct= functionality and that the disable and lock interfaces work as expected. I= haven=92t fuzzed it or anything that involved. 4. Currently, LockVariablePolicy can prevent RegisterVariablePolicy and Di= sableVariablePolicy. So in SMI hander, could we check the variable policy i= s locked or not firstly and then decide whether need to check and execution= for VAR_CHECK_POLICY_COMMAND_REGISTER and VAR_CHECK_POLICY_COMMAND_DISABLE= ? I=92ll take a look, but my gut says this may be an unnecessary complicatio= n. 5. Since there is the logic when variable policy is disabled, it will perm= it deletion of auth/protected variables. Could we add some comments in code= to mention that variable policy should always be enabled for security conc= ern to avoid giving bad example? I=92m happy to think about how to document this, but I=92m not immediately= inclined to outright say it shouldn=92t be disabled. I=92d be happy to say= that it shouldn=92t be disabled in =93normal, production configuration=94,= but it=92s entirely reasonable to be disabled in a Manufacturing or R&R en= vironment and we would actually prefer this be used because it would at lea= st be consistent across platforms, rather than being something done ad hoc = by each platform that needs it. Would that be sufficient? Thanks, Dandan > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Dandan > Bi > Sent: Thursday, July 2, 2020 10:14 AM > To: devel@edk2.groups.io; bret@corthon.com > Cc: Yao, Jiewen ; Zhang, Chao B > ; Wang, Jian J ; Wu, Hao > A ; Gao, Liming ; Justen, > Jordan L ; Laszlo Ersek ; > Ard Biesheuvel ; Andrew Fish > ; Ni, Ray > Subject: Re: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy featur= e > > Hi Bret, > > Thanks for the contribution. > > I have taken an overview of this patch series and have some small commen= ts > in the related patches, please check in sub-patch. > > I will review the patch series more in details and bring more comments b= ack > if have. Do you have a branch for these patches in GitHub? Which should = be > easy for review. > > > Thanks, > Dandan > > > -----Original Message----- > > From: devel@edk2.groups.io On Behalf Of Bret > > Barkelew > > Sent: Tuesday, June 23, 2020 2:41 PM > > To: devel@edk2.groups.io > > Cc: Yao, Jiewen ; Zhang, Chao B > > ; Wang, Jian J ; Wu, > > Hao A ; Gao, Liming ; > > Justen, Jordan L ; Laszlo Ersek > > ; Ard Biesheuvel ; > Andrew > > Fish ; Ni, Ray > > Subject: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy feature > > > > REF:https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%= 2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2522&data=3D02%7C01%7CBr= et.Barkelew%40microsoft.com%7C91eed7c4a0d54e2eff6008d83dfdc4ec%7C72f988bf86= f141af91ab2d7cd011db47%7C1%7C0%7C637327507431539442&sdata=3DcLpx7VZsG%2= F6r6GCXmiCS4DmmgOH4iKfX3VSAAYUOU00%3D&reserved=3D0 > > > > The 14 patches in this series add the VariablePolicy feature to the > > core, deprecate Edk2VarLock (while adding a compatibility layer to > > reduce code churn), and integrate the VariablePolicy libraries and > > protocols into Variable Services. > > > > Since the integration requires multiple changes, including adding > > libraries, a protocol, an SMI communication handler, and > > VariableServices integration, the patches are broken up by individual > > library additions and then a final integration. Security-sensitive > > changes like bypassing Authenticated Variable enforcement are also > > broken out into individual patches so that attention can be called dir= ectly to > them. > > > > Platform porting instructions are described in this wiki entry: > > https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fgi= thub.com%2Ftianocore%2Ftianocore.github.io%2Fwiki%2FVariablePolicy-&dat= a=3D02%7C01%7CBret.Barkelew%40microsoft.com%7C91eed7c4a0d54e2eff6008d83dfdc= 4ec%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637327507431539442&sda= ta=3D%2FYNgK7yixA5Gi7E9bHw3LIUNAQpZMh9ykTUqCqv2SRY%3D&reserved=3D0 > > Protocol---Enhanced-Method-for-Managing-Variables#platform-porting > > > > Discussion of the feature can be found in multiple places throughout > > the last year on the RFC channel, staging branches, and in devel. > > > > Most recently, this subject was discussed in this thread: > > https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fed= k2.groups.io%2Fg%2Fdevel%2Fmessage%2F53712&data=3D02%7C01%7CBret.Barkel= ew%40microsoft.com%7C91eed7c4a0d54e2eff6008d83dfdc4ec%7C72f988bf86f141af91a= b2d7cd011db47%7C1%7C0%7C637327507431539442&sdata=3Di7qaO6eZT8%2BzCT0sat= TptMWwCNspDz%2BS05eJmGGR628%3D&reserved=3D0 > > (the code branches shared in that discussion are now out of date, but > > the whitepapers and discussion are relevant). > > > > Cc: Jiewen Yao > > Cc: Chao Zhang > > Cc: Jian J Wang > > Cc: Hao A Wu > > Cc: Liming Gao > > Cc: Jordan Justen > > Cc: Laszlo Ersek > > Cc: Ard Biesheuvel > > Cc: Andrew Fish > > Cc: Ray Ni > > Cc: Bret Barkelew > > Signed-off-by: Bret Barkelew > > > > v6 changes: > > * Fix an issue with uninitialized Status in InitVariablePolicyLib() > > and > > DeinitVariablePolicyLib() > > * Fix GCC building in shell-based functional test > > * Rebase on latest origin/master > > > > v5 changes: > > * Fix the CONST mismatch in VariablePolicy.h and > > VariablePolicySmmDxe.c > > * Fix EFIAPI mismatches in the functional unittest > > * Rebase on latest origin/master > > > > v4 changes: > > * Remove Optional PcdAllowVariablePolicyEnforcementDisable PCD from > > platforms > > * Rebase on master > > * Migrate to new MmCommunicate2 protocol > > * Fix an oversight in the default return value for > > InitMmCommonCommBuffer > > * Fix in VariablePolicyLib to allow ExtraInitRuntimeDxe to consume > > variables > > > > V3 changes: > > * Address all non-unittest issues with ECC > > * Make additional style changes > > * Include section name in hunk headers in "ini-style" files > > * Remove requirement for the EdkiiPiSmmCommunicationsRegionTable > > driver > > (now allocates its own buffer) > > * Change names from VARIABLE_POLICY_PROTOCOL and > > gVariablePolicyProtocolGuid > > to EDKII_VARIABLE_POLICY_PROTOCOL and > > gEdkiiVariablePolicyProtocolGuid > > * Fix GCC warning about initializing externs > > * Add UNI strings for new PCD > > * Add patches for ArmVirtPkg, OvmfXen, and UefiPayloadPkg > > * Reorder patches according to Liming's feedback about adding to > platforms > > before changing variable driver > > > > V2 changes: > > * Fixed implementation for RuntimeDxe > > * Add PCD to block DisableVariablePolicy > > * Fix the DumpVariablePolicy pagination in SMM > > > > Bret Barkelew (14): > > MdeModulePkg: Define the VariablePolicy protocol interface > > MdeModulePkg: Define the VariablePolicyLib > > MdeModulePkg: Define the VariablePolicyHelperLib > > MdeModulePkg: Define the VarCheckPolicyLib and SMM interface > > OvmfPkg: Add VariablePolicy engine to OvmfPkg platform > > EmulatorPkg: Add VariablePolicy engine to EmulatorPkg platform > > ArmVirtPkg: Add VariablePolicy engine to ArmVirtPkg platform > > UefiPayloadPkg: Add VariablePolicy engine to UefiPayloadPkg platform > > MdeModulePkg: Connect VariablePolicy business logic to > > VariableServices > > MdeModulePkg: Allow VariablePolicy state to delete protected variabl= es > > SecurityPkg: Allow VariablePolicy state to delete authenticated > > variables > > MdeModulePkg: Change TCG MOR variables to use VariablePolicy > > MdeModulePkg: Drop VarLock from RuntimeDxe variable driver > > MdeModulePkg: Add a shell-based functional test for VariablePolicy > > > > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.c > > | 320 +++ > > > > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.c > > | 396 ++++ > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitNull.c > > | 46 + > > > > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitRuntimeDx > > e.c | 85 + > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.c > > | 816 +++++++ > > > > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/VariablePo > > licyUnitTest.c | 2440 ++++++++++++++++++++ > > > > > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyFu > > ncTestApp.c | 1978 ++++++++++++++++ > > MdeModulePkg/Universal/Variable/RuntimeDxe/TcgMorLockDxe.c > > | 52 +- > > MdeModulePkg/Universal/Variable/RuntimeDxe/TcgMorLockSmm.c > > | 60 +- > > MdeModulePkg/Universal/Variable/RuntimeDxe/VarCheck.c > > | 49 +- > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c > > | 53 + > > > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequstToLock > > .c | 71 + > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariablePolicySmmDxe.c > > | 642 +++++ > > > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe. > > c | 14 + > > SecurityPkg/Library/AuthVariableLib/AuthService.c = | > 22 > > +- > > ArmVirtPkg/ArmVirt.dsc.inc = | 4 + > > EmulatorPkg/EmulatorPkg.dsc = | 3 + > > MdeModulePkg/Include/Guid/VarCheckPolicyMmi.h > | > > 54 + > > MdeModulePkg/Include/Library/VariablePolicyHelperLib.h > > | 164 ++ > > MdeModulePkg/Include/Library/VariablePolicyLib.h = | > > 207 ++ > > MdeModulePkg/Include/Protocol/VariablePolicy.h = | > > 157 ++ > > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf > > | 42 + > > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.uni > > | 12 + > > > > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.i > > nf > > | 35 + > > > > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.u > > ni > > | 12 + > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.inf > > | 44 + > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.uni > > | 12 + > > > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf > > | 51 + > > > > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/VariablePo > > licyUnitTest.inf | 40 + > > MdeModulePkg/MdeModulePkg.ci.yaml = | 4 > +- > > MdeModulePkg/MdeModulePkg.dec = | 26 +- > > MdeModulePkg/MdeModulePkg.dsc = | 15 + > > MdeModulePkg/MdeModulePkg.uni = | 7 + > > MdeModulePkg/Test/MdeModulePkgHostTest.dsc > | > > 11 + > > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/Readme.md > > | 55 + > > > > > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyFu > > ncTestApp.inf | 42 + > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf > > | 5 + > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf > > | 4 + > > > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.i > > nf | 10 + > > > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf > > | 4 + > > OvmfPkg/OvmfPkgIa32.dsc = | 5 + > > OvmfPkg/OvmfPkgIa32X64.dsc = | 5 + > > OvmfPkg/OvmfPkgX64.dsc = | 5 + > > OvmfPkg/OvmfXen.dsc = | 4 + > > SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf = | > > 2 + > > UefiPayloadPkg/UefiPayloadPkgIa32.dsc = | 4 + > > UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc = | 4 + > > 47 files changed, 8015 insertions(+), 78 deletions(-) create mode > > 100644 MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.c > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.c > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitNull.c > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitRuntimeD > > x > > e.c > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.c > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/Variable > > Po > > licyUnitTest.c > > create mode 100644 > > > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyFu > > ncTestApp.c > > create mode 100644 > > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequstToLock > > .c > > create mode 100644 > > MdeModulePkg/Universal/Variable/RuntimeDxe/VariablePolicySmmDxe.c > > create mode 100644 MdeModulePkg/Include/Guid/VarCheckPolicyMmi.h > > create mode 100644 > > MdeModulePkg/Include/Library/VariablePolicyHelperLib.h > > create mode 100644 MdeModulePkg/Include/Library/VariablePolicyLib.h > > create mode 100644 MdeModulePkg/Include/Protocol/VariablePolicy.h > > create mode 100644 > > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf > > create mode 100644 > > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.uni > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.i > > nf > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.u > > ni > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.inf > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.uni > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf > > create mode 100644 > > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/Variable > > Po > > licyUnitTest.inf > > create mode 100644 > > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/Readme.md > > create mode 100644 > > > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyFu > > ncTestApp.inf > > > > -- > > 2.26.2.windows.1.8.g01c50adf56.20200515075929 > > > > > > > > > --_000_CY4PR21MB0743D653B93AE9CA81D06D4DEF5C0CY4PR21MB0743namp_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable

Responses below=85=

 

- Bret

 

From: Dandan Bi via groups.io<= br> Sent: Tuesday, August 11, 2020 6:52 AM
To: devel@edk2.groups.io; Bi, Dandan; bret@corthon.com Cc: Yao, Jiewen; Zhang, Chao B; Wang, Jian J; Wu, Hao A; liming.gao; Justen, Jordan L; Laszlo Ersek; Ard Biesheuvel; Andrew Fish; Ni, Ray
Subject: [EXTERNAL] Re: [edk2-devel] [PATCH v6 00/14] Add the Varia= blePolicy feature

 

Hi Bret,

Sorry for the delayed response.

Some more comments here:

1. Currently I see the LockVaribePolicy is called at ReadyToBoot by variab= le driver, could we update it to be called at EndOfDxe? We should prevent m= alicious code registering policy after EndOfDxe for security concern. And c= ould we also add the test case to check the variable policy is locked at EndofDxe?

We could. Right now it=92s at ReadyToBoot because it=92s just there a= s a safety net and the platform could lock it earlier. Would it work to hav= e a PCD for which EventGroup GUID the platform should lock on?

2. For patch 4, the SMM communication,  some general guidelines for S= MI handler:
a)  Check whether the communication buffer is outside SMM and valid.<= br> For this feature, please double check whether the communication buffer is = checked, if all the range in communication buffer has already been checked = within existing edk2 core infrastructure, please also add the comments in t= he code to mention that it has been checked.

I checked this, but I will recheck (since there=92ve been a few revis= ions in the patches) and update the comments.

b) Should copy the communication buffer to SMRAM before checking the data = fields to avoid TOC/TOU attac
For this feature, for example, when dump variable policy, if malicious cod= e updates the DumpParams->TotalSize in communication buffer to smaller o= ne to allocate the PaginationCache buffer, and then update it the correct o= ne and dump the variable policy data into the PaginationCache buffer, it will cause buffer overflow in this ca= se.  So please double check the code and copy the communication buffer= into SMRAM to avoid such kind issue.

Will also check for this.

3. Did you do any security test for this feature?

Such as? There are both unit tests and integration tests to ensure co= rrect functionality and that the disable and lock interfaces work as expect= ed. I haven=92t fuzzed it or anything that involved.

4. Currently, LockVariablePolicy can prevent RegisterVariablePolicy and Di= sableVariablePolicy. So in SMI hander, could we check the variable policy i= s locked or not firstly and then decide whether need to check and execution= for VAR_CHECK_POLICY_COMMAND_REGISTER and VAR_CHECK_POLICY_COMMAND_DISABLE?

I=92ll take a look, but my gut says this may be an unnecessary compli= cation.

5. Since there is the logic when variable policy is disabled, it will perm= it deletion of auth/protected variables. Could we add some comments in code= to mention that variable policy should always be enabled for security conc= ern to avoid giving bad example?

I=92m happy to think about how to document this, but I=92m not immedi= ately inclined to outright say it shouldn=92t be disabled. I=92d be happy t= o say that it shouldn=92t be disabled in =93normal, production configuration=94, but it=92s entirely reasonable to be disable= d in a Manufacturing or R&R environment and we would actually prefer th= is be used because it would at least be consistent across platforms, rather= than being something done ad hoc by each platform that needs it. Would that be sufficient?

Thanks,
Dandan
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of = Dandan
> Bi
> Sent: Thursday, July 2, 2020 10:14 AM
> To: devel@edk2.groups.io; bret@corthon.com
> Cc: Yao, Jiewen <jiewen.yao@intel.com>; Zhang, Chao B
> <chao.b.zhang@intel.com>; Wang, Jian J <jian.j.wang@intel.co= m>; Wu, Hao
> A <hao.a.wu@intel.com>; Gao, Liming <liming.gao@intel.com>= ;; Justen,
> Jordan L <jordan.l.justen@intel.com>; Laszlo Ersek <lersek@r= edhat.com>;
> Ard Biesheuvel <ard.biesheuvel@arm.com>; Andrew Fish
> <afish@apple.com>; Ni, Ray <ray.ni@intel.com>
> Subject: Re: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy fea= ture
>
> Hi Bret,
>
> Thanks for the contribution.
>
> I have taken an overview of this patch series and have some small com= ments
> in the related patches, please check in sub-patch.
>
> I will review the patch series more in details and bring more comment= s back
> if have. Do you have a branch for these patches in GitHub? Which shou= ld be
> easy for review.
>
>
> Thanks,
> Dandan
>
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behal= f Of Bret
> > Barkelew
> > Sent: Tuesday, June 23, 2020 2:41 PM
> > To: devel@edk2.groups.io
> > Cc: Yao, Jiewen <jiewen.yao@intel.com>; Zhang, Chao B
> > <chao.b.zhang@intel.com>; Wang, Jian J <jian.j.wang@int= el.com>; Wu,
> > Hao A <hao.a.wu@intel.com>; Gao, Liming <liming.gao@int= el.com>;
> > Justen, Jordan L <jordan.l.justen@intel.com>; Laszlo Ersek=
> > <lersek@redhat.com>; Ard Biesheuvel <ard.biesheuvel@arm= .com>;
> Andrew
> > Fish <afish@apple.com>; Ni, Ray <ray.ni@intel.com> > > Subject: [edk2-devel] [PATCH v6 00/14] Add the VariablePolicy fe= ature
> >
> > REF:https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%= 3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2522&amp;data=3D02= %7C01%7CBret.Barkelew%40microsoft.com%7C91eed7c4a0d54e2eff6008d83dfdc4ec%7C= 72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637327507431539442&amp;sdata= = =3DcLpx7VZsG%2F6r6GCXmiCS4DmmgOH4iKfX3VSAAYUOU00%3D&amp;reserved=3D0 > >
> > The 14 patches in this series add the VariablePolicy feature to = the
> > core, deprecate Edk2VarLock (while adding a compatibility layer = to
> > reduce code churn), and integrate the VariablePolicy libraries a= nd
> > protocols into Variable Services.
> >
> > Since the integration requires multiple changes, including addin= g
> > libraries, a protocol, an SMI communication handler, and
> > VariableServices integration, the patches are broken up by indiv= idual
> > library additions and then a final integration. Security-sensiti= ve
> > changes like bypassing Authenticated Variable enforcement are al= so
> > broken out into individual patches so that attention can be call= ed directly to
> them.
> >
> > Platform porting instructions are described in this wiki entry:<= br> > > https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fgithub= .com%2Ftianocore%2Ftianocore.github.io%2Fwiki%2FVariablePolicy-&amp;dat= a=3D02%7C01%7CBret.Barkelew%40microsoft.com%7C91eed7c4a0d54e2eff6008d83dfdc= 4ec%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637327507431539442&amp= ;sdata=3D%2FYNgK7yixA5Gi7E9bHw3LIUNAQpZMh9ykTUqCqv2SRY%3D&amp;reserved= =3D0
> > Protocol---Enhanced-Method-for-Managing-Variables#platform-porti= ng
> >
> > Discussion of the feature can be found in multiple places throug= hout
> > the last year on the RFC channel, staging branches, and in devel= .
> >
> > Most recently, this subject was discussed in this thread:
> > https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fedk2.g= roups.io%2Fg%2Fdevel%2Fmessage%2F53712&amp;data=3D02%7C01%7CBret.Barkel= ew%40microsoft.com%7C91eed7c4a0d54e2eff6008d83dfdc4ec%7C72f988bf86f141af91a= b2d7cd011db47%7C1%7C0%7C637327507431539442&amp;sdata=3Di7qaO6eZT8%2BzCT= 0satTptMWwCNspDz%2BS05eJmGGR628%3D&amp;reserved=3D0
> > (the code branches shared in that discussion are now out of date= , but
> > the whitepapers and discussion are relevant).
> >
> > Cc: Jiewen Yao <jiewen.yao@intel.com>
> > Cc: Chao Zhang <chao.b.zhang@intel.com>
> > 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: Jordan Justen <jordan.l.justen@intel.com>
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
> > Cc: Andrew Fish <afish@apple.com>
> > Cc: Ray Ni <ray.ni@intel.com>
> > Cc: Bret Barkelew <brbarkel@microsoft.com>
> > Signed-off-by: Bret Barkelew <brbarkel@microsoft.com>
> >
> > v6 changes:
> > * Fix an issue with uninitialized Status in InitVariablePolicyLi= b()
> > and
> > DeinitVariablePolicyLib()
> > * Fix GCC building in shell-based functional test
> > * Rebase on latest origin/master
> >
> > v5 changes:
> > * Fix the CONST mismatch in VariablePolicy.h and
> > VariablePolicySmmDxe.c
> > * Fix EFIAPI mismatches in the functional unittest
> > * Rebase on latest origin/master
> >
> > v4 changes:
> > * Remove Optional PcdAllowVariablePolicyEnforcementDisable PCD f= rom
> > platforms
> > * Rebase on master
> > * Migrate to new MmCommunicate2 protocol
> > * Fix an oversight in the default return value for
> > InitMmCommonCommBuffer
> > * Fix in VariablePolicyLib to allow ExtraInitRuntimeDxe to consu= me
> > variables
> >
> > V3 changes:
> > * Address all non-unittest issues with ECC
> > * Make additional style changes
> > * Include section name in hunk headers in "ini-style" = files
> > * Remove requirement for the EdkiiPiSmmCommunicationsRegionTable=
> > driver
> >   (now allocates its own buffer)
> > * Change names from VARIABLE_POLICY_PROTOCOL and
> > gVariablePolicyProtocolGuid
> >   to EDKII_VARIABLE_POLICY_PROTOCOL and
> > gEdkiiVariablePolicyProtocolGuid
> > * Fix GCC warning about initializing externs
> > * Add UNI strings for new PCD
> > * Add patches for ArmVirtPkg, OvmfXen, and UefiPayloadPkg
> > * Reorder patches according to Liming's feedback about adding to=
> platforms
> >   before changing variable driver
> >
> > V2 changes:
> > * Fixed implementation for RuntimeDxe
> > * Add PCD to block DisableVariablePolicy
> > * Fix the DumpVariablePolicy pagination in SMM
> >
> > Bret Barkelew (14):
> >   MdeModulePkg: Define the VariablePolicy protocol int= erface
> >   MdeModulePkg: Define the VariablePolicyLib
> >   MdeModulePkg: Define the VariablePolicyHelperLib
> >   MdeModulePkg: Define the VarCheckPolicyLib and SMM i= nterface
> >   OvmfPkg: Add VariablePolicy engine to OvmfPkg platfo= rm
> >   EmulatorPkg: Add VariablePolicy engine to EmulatorPk= g platform
> >   ArmVirtPkg: Add VariablePolicy engine to ArmVirtPkg = platform
> >   UefiPayloadPkg: Add VariablePolicy engine to UefiPay= loadPkg platform
> >   MdeModulePkg: Connect VariablePolicy business logic = to
> >     VariableServices
> >   MdeModulePkg: Allow VariablePolicy state to delete p= rotected variables
> >   SecurityPkg: Allow VariablePolicy state to delete au= thenticated
> >     variables
> >   MdeModulePkg: Change TCG MOR variables to use Variab= lePolicy
> >   MdeModulePkg: Drop VarLock from RuntimeDxe variable = driver
> >   MdeModulePkg: Add a shell-based functional test for = VariablePolicy
> >
> >  MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.c=
> > |  320 +++
> >
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelpe= rLib.c
> > |  396 ++++
> >  MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtra= InitNull.c
> > |   46 +
> >
> >
> MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitRuntime= Dx
> > e.c          &= nbsp;    |   85 +
> >  MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.c=
> > |  816 +++++++
> >
> >
> MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/Variabl= ePo
> > licyUnitTest.c   | 2440 ++++++++++++++++++++
> >
> >
> MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyF= u
> > ncTestApp.c        | 1978 +++= +++++++++++++
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/TcgMorLockDxe.c=
> > |   52 +-
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/TcgMorLockSmm.c=
> > |   60 +-
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VarCheck.c
> > |   49 +-
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c > > |   53 +
> >
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequstToLock > > .c          &n= bsp;         |   71 +
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariablePolicyS= mmDxe.c
> > |  642 +++++
> >
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.
> > c          &nb= sp;            |&nbs= p;  14 +
> >  SecurityPkg/Library/AuthVariableLib/AuthService.c &nb= sp;            =             &nb= sp;            = |
> 22
> > +-
> >  ArmVirtPkg/ArmVirt.dsc.inc     &n= bsp;            = ;            &n= bsp;            = ;            &n= bsp;       |    4 +
> >  EmulatorPkg/EmulatorPkg.dsc     &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp;      |    3 +
> >  MdeModulePkg/Include/Guid/VarCheckPolicyMmi.h
> |
> > 54 +
> >  MdeModulePkg/Include/Library/VariablePolicyHelperLib.h
> > |  164 ++
> >  MdeModulePkg/Include/Library/VariablePolicyLib.h &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp; |
> > 207 ++
> >  MdeModulePkg/Include/Protocol/VariablePolicy.h  =             &nb= sp;            =             &nb= sp;   |
> > 157 ++
> >  MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.i= nf
> > |   42 +
> >  MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.u= ni
> > |   12 +
> >
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelpe= rLib.i
> > nf
> > |   35 +
> >
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelpe= rLib.u
> > ni
> > |   12 +
> >  MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.i= nf
> > |   44 +
> >  MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.u= ni
> > |   12 +
> >
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeD= xe.inf
> > |   51 +
> >
> >
> MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/Variabl= ePo
> > licyUnitTest.inf |   40 +
> >  MdeModulePkg/MdeModulePkg.ci.yaml    &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp; |    4
> +-
> >  MdeModulePkg/MdeModulePkg.dec     = ;            &n= bsp;            = ;            &n= bsp;            = ;     |   26 +-
> >  MdeModulePkg/MdeModulePkg.dsc     = ;            &n= bsp;            = ;            &n= bsp;            = ;     |   15 +
> >  MdeModulePkg/MdeModulePkg.uni     = ;            &n= bsp;            = ;            &n= bsp;            = ;     |    7 +
> >  MdeModulePkg/Test/MdeModulePkgHostTest.dsc
> |
> > 11 +
> >  MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/Read= me.md
> > |   55 +
> >
> >
> MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyF= u
> > ncTestApp.inf      |   42 + > >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntime= Dxe.inf
> > |    5 +
> >  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf=
> > |    4 +
> >
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.i > > nf          &n= bsp;          |   10= +
> >
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf > > |    4 +
> >  OvmfPkg/OvmfPkgIa32.dsc      = ;            &n= bsp;            = ;            &n= bsp;            = ;          |   = 5 +
> >  OvmfPkg/OvmfPkgIa32X64.dsc     &n= bsp;            = ;            &n= bsp;            = ;            &n= bsp;       |    5 +
> >  OvmfPkg/OvmfPkgX64.dsc      =             &nb= sp;            =             &nb= sp;            =            |  &= nbsp; 5 +
> >  OvmfPkg/OvmfXen.dsc      &nb= sp;            =             &nb= sp;            =             &nb= sp;            = |    4 +
> >  SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf&nb= sp;            =             &nb= sp;        |
> > 2 +
> >  UefiPayloadPkg/UefiPayloadPkgIa32.dsc   &nb= sp;            =             &nb= sp;            =            |  &= nbsp; 4 +
> >  UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc   =             &nb= sp;            =             &nb= sp;        |    4 +
> >  47 files changed, 8015 insertions(+), 78 deletions(-) = ; create mode
> > 100644 MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.= c
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelpe= rLib.c
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitNu= ll.c
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyExtraInitRu= ntimeD
> > x
> > e.c
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.c
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/Va= riable
> > Po
> > licyUnitTest.c
> >  create mode 100644
> >
> MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyF= u
> > ncTestApp.c
> >  create mode 100644
> >
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableLockRequstToLock > > .c
> >  create mode 100644
> > MdeModulePkg/Universal/Variable/RuntimeDxe/VariablePolicySmmDxe.= c
> >  create mode 100644 MdeModulePkg/Include/Guid/VarCheckPolic= yMmi.h
> >  create mode 100644
> > MdeModulePkg/Include/Library/VariablePolicyHelperLib.h
> >  create mode 100644 MdeModulePkg/Include/Library/VariablePo= licyLib.h
> >  create mode 100644 MdeModulePkg/Include/Protocol/VariableP= olicy.h
> >  create mode 100644
> > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf
> >  create mode 100644
> > MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.uni
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelpe= rLib.i
> > nf
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelpe= rLib.u
> > ni
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.inf
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.uni
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeD= xe.inf
> >  create mode 100644
> > MdeModulePkg/Library/VariablePolicyLib/VariablePolicyUnitTest/Va= riable
> > Po
> > licyUnitTest.inf
> >  create mode 100644
> > MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/Readme.md<= br> > >  create mode 100644
> >
> MdeModulePkg/Test/ShellTest/VariablePolicyFuncTestApp/VariablePolicyF= u
> > ncTestApp.inf
> >
> > --
> > 2.26.2.windows.1.8.g01c50adf56.20200515075929
> >
> >
> >
>
>
>


 

--_000_CY4PR21MB0743D653B93AE9CA81D06D4DEF5C0CY4PR21MB0743namp_--