From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web10.9506.1683695577658570371 for ; Tue, 09 May 2023 22:12:57 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=g3blTxVO; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: xiaoqiang.zhang@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683695577; x=1715231577; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=HdeEfYa9VVb5s2yQXjJ1ngfMCnu4zvuOdQUmBLDrX+0=; b=g3blTxVORW5RaH9UfoWzJzH0CSEXucLwtgKs5qAo1Y3f2zRk706E7bvm Q88ZMK0A0uUEloS3dwPlUTdhBfeQQGZlASqPOT1ac5SeNQimcmVbLOacg RcovATUaq6NNXdUI5mw8QUc0Ti78vTEdZb6/f4CDMfue5pszMtZvyDQeX AILWfCYppKcx3n14GTU7dZnCzG1q715ZtohNp5EPJ1RG/he+8ulAPTgLG TI03zYQHBbio44SGWm64kf2U9P61zk0u1wl9Wcyof6NBhO+VJ6ytDaFsa WkXvI9PutlQqduIrdYcUpRZ1Z+tw0lsqzLsAhBOlFKVDU8BkA/BHFJJBJ g==; X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="350164399" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="350164399" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2023 22:12:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="810998969" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="810998969" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga002.fm.intel.com with ESMTP; 09 May 2023 22:12:57 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 9 May 2023 22:12:56 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Tue, 9 May 2023 22:12:56 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.173) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Tue, 9 May 2023 22:12:56 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a9sgoOoZcXxFanc0TV4DWt2Ou4UQqnouJ/RVVc7DmNBggFvLXzyo6wN29E4T2/e6KKQTTYBzw4pmn4jRB1aMuJILmp525aznN0HIzQrGh13LkfOs1X+xcQpUzDXQ45mps0fIiEUq1Kcd5CzCngMI2N6N3kIcw0uShwzq5jAEWCHLnRVNe5AfC1BcoKfv1y8R9nzJG4+ERTp1rX8xqYKo5fkz8NqOnO6t5U2aCVGdf9yPMBfV67jC4Nhf6b4l7f5rFzaKcpeibslMxjb7RlOmI85Y808zlvr80GJv8Ege/cE8GnQ5rO4O49WLfzmhTNdXqkbKPW4e4Rx82OJSOGwuTg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Fm9ASCK1EeuLju2VQVau5Kr9huMCB54Tgd/2z9mOmPY=; b=UIAowqkvkt+EQJBINVR95Loczw5HiBwtomQPSrWnFFSa/MZf83HP09VKCJYIBFfBskVzM0qvXpj6nSEByY3+RsJAYaKQwCeMm7cfElHZik4Z3b+1J9L0FPJh7T1oDDSnzlf1onjEcLIIFQsKvgpZ03Nq1Sus/w/sFxk4Kur3W6sa8Qmsf6OUqCVQOUfL5kPh4gcsOIdFX9Zp4knubE/Jy74NhNYGdehVJqM1tuK6ZDP1NSJx5dGF2afVYgK6bj5VtVFoTbn4GUQ1Fzkut2dDAWHzTZ8HtMdQTmx+LB0fuIlT9tOG1S0/Pbbcl3R7MUndyx5TjfYrH8/SNuj78jQgdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM4PR11MB5392.namprd11.prod.outlook.com (2603:10b6:5:397::10) by PH0PR11MB5626.namprd11.prod.outlook.com (2603:10b6:510:ee::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.33; Wed, 10 May 2023 05:12:48 +0000 Received: from DM4PR11MB5392.namprd11.prod.outlook.com ([fe80::ac7d:9351:2ebb:46f3]) by DM4PR11MB5392.namprd11.prod.outlook.com ([fe80::ac7d:9351:2ebb:46f3%4]) with mapi id 15.20.6363.032; Wed, 10 May 2023 05:12:47 +0000 From: "Zhang, Xiaoqiang" To: "Desimone, Nathaniel L" , "devel@edk2.groups.io" CC: "Chiu, Chasel" , "Gao, Liming" , "Dong, Eric" Subject: Re: [PATCH v1] MinPlatformPkg: Fix SetLargeVariable fail issue Thread-Topic: [PATCH v1] MinPlatformPkg: Fix SetLargeVariable fail issue Thread-Index: AQHZgjiUbu1ducbOy0yDTrX6eforoq9S7QQAgAAFEVA= Date: Wed, 10 May 2023 05:12:47 +0000 Message-ID: References: <20230509053834.379-1-xiaoqiang.zhang@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR11MB5392:EE_|PH0PR11MB5626:EE_ x-ms-office365-filtering-correlation-id: 8231f0d6-6904-466b-d07b-08db511531ca x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jxYHxr7p1XkujiMUsGtow5prMEznbQXo9J+S2p3vs2seiL9qaenwpr6FiDx0D4IgSCTfhGl6aj0hZHlfEy2XyzCs2Etn2ieESyhZMgnIzF9lgvhAq9dfgjLkPOJMmRvYxp44pVBOxzzIds1X2skZ2l/7vlpLKTWsf/HO9b4x0zddyydR80qKkC4ZKxM8BtOZJkx4q+3GRc3K16MPRWIfldqbQW08/zdlvokAFx2FkkBURNc7oQBqpmBvDroTROOjRDtO6TNhIils24jH2bYCSVXbp3a+XRL4HoNtr1BzeAuadYjwYWeNtYrMsrYClz/SJma+GW6yG4lxAIYfeWpEyjF+9zVkUfQDl4L7x9VjEFaPyZPHT9a3wZH+hUE2I1XdSnBBC3Z7hJ0EXnOJWETt4w7atRNZuWH9TaqEARIW/e28hmKkcXAmtpZNsFUvFKjrlv7Vd2Cup8PesGSTUZSgkB/hqAd4OW8tNdmUno0TPs3ExpVkJwLL/f1BxvF2EoLdL1y98wz6frCpSMAOoLMen7fuzUbVu61KA/Bf3kry+OQa98oAljdRQcmuzSTR1M+ZUNZ9Tx+o9ibz+YRtAV84/SZAJi+7k1ykd0KTsqd3gyg= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5392.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(39860400002)(366004)(346002)(376002)(396003)(451199021)(8676002)(52536014)(5660300002)(8936002)(86362001)(83380400001)(9686003)(186003)(82960400001)(107886003)(53546011)(26005)(6506007)(966005)(122000001)(38100700002)(38070700005)(110136005)(478600001)(54906003)(71200400001)(7696005)(33656002)(316002)(76116006)(41300700001)(66946007)(55016003)(66446008)(64756008)(66556008)(4326008)(66476007)(2906002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?38LEUNQS3YqLLqImlASBgYAS7Z0hNjmPk5O6SyCmH/feW3dJssU6YCQ7N7gi?= =?us-ascii?Q?ofKK+zz7OzQs5LifEhC8seGXgIx1LQYZu7oImPrGFYRncPtQAEgJ3utnCKB4?= =?us-ascii?Q?QzIkmB1gHOKcOpVBeY65qjCruGWfMhS4j0phbrbdIZSX3FzYpcvJKvHldDIf?= =?us-ascii?Q?RWk1VrDpfcsaDUu/B25VvnLga1jkn9RA12aYF2uyJnFEM86SpAbDNnfz5GF3?= =?us-ascii?Q?h4rLg+GixGCQZFx2IFABp7yqVo/f8l5WS0g9OZn4+vFOMelzA6+dWzIJDjNi?= =?us-ascii?Q?d8NIgY6FwTjL1Ta3zLNvSL8hkaGlm8PkV6K1xaC/Pd/nMnyQaLbo8sWqg2XM?= =?us-ascii?Q?yfmViwwwLxe+OgGzjO6CypTi0pAtE1xQ6uLQMcGrKA+z8krJk1KemD5mZOZq?= =?us-ascii?Q?1VqkkWRqapM0og1VBVcZd/Lgi/dlXalmLLfwh7tWqKV2PO/D2qgvlAjmxB18?= =?us-ascii?Q?8WCMIDrp6wrEcXI13VOYpEnAcorAoCsF+nZfZ2sfRlz7IqpUmRjVWQ7M0sKR?= =?us-ascii?Q?/1yLnPrgknMMwuTY/91t+pWP8fCxwt+Gm88hdLS5EPri7LYfNH5tYm6Rhgk3?= =?us-ascii?Q?QKh7TWFWZJLIdfvDEOGMGwFsNvI8ZBxgHQJhpBtzBkWoYmU26nJ1ux2rGYjO?= =?us-ascii?Q?8r30TaHnHFMtKcjU6F677GSIemwgcCaVR/zE3vP0fIHGDc7MTgLCU2Cb7G5e?= =?us-ascii?Q?RqINbWoxoFmv2oFPI/h9knv5urIeLbLYd3EOKWEvLAVC/hFOusYGdznuSSPp?= =?us-ascii?Q?4YtYWCkyDo1uWSCxHfuhcMunwbvxIoWuqDXglrjerlta8ACZ22MJAmkUKbAc?= =?us-ascii?Q?/ebOh4knOkZFy7nkC+sIYCmnYjFVTZEKoIODSriuVEjpmaGSraTe8Eac58R3?= =?us-ascii?Q?T2c6bWsvdziJWc+L7WeXYqsIjaqB7F7NA1071wcveRtmDDnbu3kxQvXdxCky?= =?us-ascii?Q?zxt86lyCRm9o7UCiw8ee5relol45l9b4v4UjVLQB6QoYQ3NbQitoY+rBOJTl?= =?us-ascii?Q?rSdFnV+EDIHM2xaHg3BPwWr58xzoCMc7tWHhMShj+/dJzSm4+cvDCGJx0RWk?= =?us-ascii?Q?Bt2ZeX7bHKr8F6204NmL2XloVXJm23Ynrzlsn5i9+MFyr1w1jWpHWv7ZGTgX?= =?us-ascii?Q?rlrSMFIJdayD/joz865Fgx7Vjq0Z6/0wOQOTfvZT5dG8sBecrTLJpAwfuTr2?= =?us-ascii?Q?6Ku4bgd/1le45VJPaaXZEoSl2ybDN0qTC9J4xJcyjH0MBRMEEvytVrFf0K9s?= =?us-ascii?Q?7KiX0pECYwl0n7bnMYyGnr5RGw2Ah9YtrZJbvFtAzqgsh5QHo0bzxS983i5N?= =?us-ascii?Q?gZAM4czZcDt5Anp80sNkvB8fT3BlDFBYWvTlNrXj6uZc6sMFqEvhiPPvyu+6?= =?us-ascii?Q?aHsIHg8yjkYkk/HlbIj3EgpE+PV3JaFrHmGCcaGQ4esPrWdyy2E1iDpYd0OB?= =?us-ascii?Q?DdvlBTYe3E8GgnAwLz22DMmBpIwjvkAtHrsBYTnmG5wud380fpOHiXPJwHes?= =?us-ascii?Q?nOnMmuT+cRHrUC4yG2/cSuXAHuMTu1FfCp4osulX2N+lk+/P7hC5thfLmTgV?= =?us-ascii?Q?DQRZcgXX2mpp7Z7oZErNklCyxnNxEWuF7geI2YCz?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5392.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8231f0d6-6904-466b-d07b-08db511531ca X-MS-Exchange-CrossTenant-originalarrivaltime: 10 May 2023 05:12:47.4063 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ZYn285oAYMGMGLgkjm0IN/JYHWS7s5W7xr2JAbL7JFS5p8Fi8TpK+OvjpCKZhUQJP4bSj/0OmYI0q/gG2EnGIbnhT6jvpU4y/cm9O67r5Qw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5626 Return-Path: xiaoqiang.zhang@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks Nate for the comprehensive proposal! Since I found SetLargeVariable only used in SaveMemoryConfig DXE driver now= , so how about we fix this issue first to unblock the verification on serve= r platform. And after that, we can handle the case you mentioned. -----Original Message----- From: Desimone, Nathaniel L =20 Sent: Wednesday, May 10, 2023 12:35 PM To: Zhang, Xiaoqiang ; devel@edk2.groups.io Cc: Chiu, Chasel ; Gao, Liming ; Dong, Eric Subject: RE: [PATCH v1] MinPlatformPkg: Fix SetLargeVariable fail issue Great catch Xiaoqiang! Only issue I see is that for 100% correctness we will need to add a check t= o see if we are past ExitBootServices().=20 This issue is if we are in OS runtime and we try to overwrite an existing v= ariable when there isn't enough space to do so without a reclaim... the cur= rent value of the large variable will be deleted and it will be impossible = to store the new value until after a platform reset. To do this check you will need to add an AtOsRuntime() API to the VariableW= riteLib implemented in MinPlatformPkg/Library/DxeRuntimeVariableWriteLib an= d MinPlatformPkg/Library/SmmVariableWriteLib to check for OS runtime. The D= XE implementation can just be a passthrough to EfiAtRuntime() in MdePkg/Lib= rary/UefiRuntimeLib. But the SMM one will need to add a notification callba= ck for gEdkiiSmmExitBootServicesProtocolGuid and set a global variable to i= ndicate whether that event has been triggered yet. Because UefiRuntimeLib c= an only be used by DXE_RUNTIME drivers, you will need to make a separate ve= rsion of this library for boot time only DXE_DRIVERs that has an implementa= tion of AtOsRuntime() that always returns FALSE. -----Original Message----- From: Zhang, Xiaoqiang =20 Sent: Monday, May 8, 2023 10:39 PM To: devel@edk2.groups.io Cc: Zhang, Xiaoqiang ; Chiu, Chasel ; Desimone, Nathaniel L ; Gao, L= iming ; Dong, Eric Subject: [PATCH v1] MinPlatformPkg: Fix SetLargeVariable fail issue REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4454 On Server platform, when the large variable "FspNvsBuffer" is already in th= e UEFI variable store and the remaining variable storage space is less than= the large variable size. And also not in OS runtime then we need to add th= e size of the current data that will end up being replaced by the new data = to the remaining space before we decide that there is not enough space to s= tore the large variable. Cc: Chasel Chiu Cc: Nate DeSimone Cc: Liming Gao Cc: Eric Dong Signed-off-by: Xiaoqiang Zhang --- Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/LargeVariableWr= iteLib.c | 10 +++++++++- Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/BaseLargeVariab= leWriteLib.inf | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/Lar= geVariableWriteLib.c b/Platform/Intel/MinPlatformPkg/Library/BaseLargeVaria= bleLib/LargeVariableWriteLib.c index de23ae6160..da820f65b9 100644 --- a/Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/LargeVaria= bleWriteLib.c +++ b/Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/LargeVa +++ riableWriteLib.c @@ -22,7 +22,7 @@ #include #include #include - +#include #include "LargeVariableCommon.h" =20 /** @@ -270,6 +270,7 @@ SetLargeVariable ( UINT8 *OffsetPtr; UINTN BytesRemaining; UINTN SizeToSave; + UINTN BufferSize =3D 0; =20 // // Check input parameters. @@ -365,6 +366,13 @@ SetLargeVariable ( // Non-Volatile storage to store the data. // RemainingVariableStorage =3D GetRemainingVariableStorageSpace (); + // + // Check if current variable already existed in NV storage variable sp= ace + // + Status =3D GetLargeVariable (VariableName, VendorGuid, &BufferSize, NU= LL); + if ((Status =3D=3D EFI_BUFFER_TOO_SMALL) && (BufferSize !=3D 0)) { + RemainingVariableStorage =3D RemainingVariableStorage + BufferSize; + } if (DataSize > RemainingVariableStorage) { DEBUG ((DEBUG_ERROR, "SetLargeVariable: Not enough NV storage space = to store the data\n")); Status =3D EFI_OUT_OF_RESOURCES; diff --git a/Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/Bas= eLargeVariableWriteLib.inf b/Platform/Intel/MinPlatformPkg/Library/BaseLarg= eVariableLib/BaseLargeVariableWriteLib.inf index 2493a94596..cbc2a5d93a 100644 --- a/Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/BaseLargeV= ariableWriteLib.inf +++ b/Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/BaseLar +++ geVariableWriteLib.inf @@ -49,3 +49,4 @@ PrintLib VariableReadLib VariableWriteLib + LargeVariableReadLib -- 2.39.1.windows.1