From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.3235.1634095692023902577 for ; Tue, 12 Oct 2021 20:28:12 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=MB4yQWDr; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: dandan.bi@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10135"; a="250749530" X-IronPort-AV: E=Sophos;i="5.85,369,1624345200"; d="scan'208";a="250749530" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 20:28:10 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,369,1624345200"; d="scan'208";a="717140936" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by fmsmga005.fm.intel.com with ESMTP; 12 Oct 2021 20:28:10 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Tue, 12 Oct 2021 20:28:09 -0700 Received: from fmsmsx605.amr.corp.intel.com (10.18.126.85) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Tue, 12 Oct 2021 20:28:09 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Tue, 12 Oct 2021 20:28:09 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.177) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Tue, 12 Oct 2021 20:28:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EyivLFj2eFC+o8FddgkrPMtX0w91hnolKZDo4KjH9is9AMVq0jTP/2Zip+XKQEc9SZhDWK2hOEM21GaWgbeeeal9tGQhfYiLlkEQjxs0Zi/XD3gaYmseCwpjsvd9Tza1PA34izQxSCaw6hnJGmyFZSLJNyZWJzXggxzpiz3j5qayHNCrpGRdvVhHh8UERpEv1X5l4+CB90suczyUAMZEKM/KtAtivgyUWl7WiVjYRx0plxXq3xkQ4f9s/aj4jXnVKIrb6onDp7trXwKMziW6webuOY1VUhHPQR1GLwMDIksoTugMaXvdL3AKwf27Go/5/KRI+uYg9iQBoyxX3MFo0g== 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=u+HohB7Qrt1aezAPWkZuQhx4gRk6y2SMEbNE+PKLGrE=; b=Yg6uwrvpfdI+p9k9oXEAlI8tU2lWiyZ9Ilw+c6al71n3DwrbMIgIrd1bMyGXVWdVWE7F8oealRtS9ly97ixcSW/ilvgZauovmc1s9s6mCVZ+VzcLH20+HfuEO2c0xU6yvGLTfJU4VRUuPOaEBc7oMiCAfD8c8XoeiG5vu/ybdotpXOWJQHlGnuWUtixENepi5/QojXZGwZuU1QIzn8u+gtaNrUZtit7Y7Sxtq9tJsqheGsW2UKzmRBlJ3tBi9frfXB91dAHCMideUVo/LqwO7n4Q0Z3DoWH+Mwr0XGSQkFenO1/+fH4tRlE1ZOxywuwVnKRIVatntRX33jam0iJI7g== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u+HohB7Qrt1aezAPWkZuQhx4gRk6y2SMEbNE+PKLGrE=; b=MB4yQWDrK04r71kp3Rsg7mePSXHLWtEqO5A3XJTKwDQKVnbV3IYhgsOwpYnH3FoWDbz6a2OyeP8wMg0orCPUYmZRRt2Lop7xbx9nQfm54dt5JaaQD5+8MZ2OAbiaYAnoS5/YCL94D8lJ/xvVtmdO2RwIbS4LWC/nhRNe6YZ177M= Received: from DM4PR11MB5453.namprd11.prod.outlook.com (2603:10b6:5:398::15) by DM6PR11MB3452.namprd11.prod.outlook.com (2603:10b6:5:9::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.25; Wed, 13 Oct 2021 03:28:02 +0000 Received: from DM4PR11MB5453.namprd11.prod.outlook.com ([fe80::ed4c:25e0:281e:da52]) by DM4PR11MB5453.namprd11.prod.outlook.com ([fe80::ed4c:25e0:281e:da52%2]) with mapi id 15.20.4587.026; Wed, 13 Oct 2021 03:28:02 +0000 From: "Dandan Bi" To: "Ma, Hua" , "devel@edk2.groups.io" CC: "Wang, Jian J" , Liming Gao , "Ni, Ray" Subject: Re: [PATCH v2] MdeModulePkg/Core/Dxe: Acquire a lock when iterating gHandleList Thread-Topic: [PATCH v2] MdeModulePkg/Core/Dxe: Acquire a lock when iterating gHandleList Thread-Index: AQHXv0QEcMLWiSZ/j02VMxwP+x0oTKvQRgYw Date: Wed, 13 Oct 2021 03:28:02 +0000 Message-ID: References: In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7dfc8b22-661b-4591-12b5-08d98df97696 x-ms-traffictypediagnostic: DM6PR11MB3452: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: f72642WRBS6wJZIyrP8telVGSZjS03hmLD7G/OlmYib8BEmDPs/Vc5LnY1eCh9pSSRUYfvGbmqGF9nIpI/VX8jCGEX+QsPrwhhp2D1wuL2aaGQSyfe36h/ylWOw9/3hXdtmwhw3QRv+orlZfQdir8WWMd4tRfHXxH6g4RtawhvYbT6Qx8af6tyZIOKx16O2cks7R9Ls3z1V17EzMflZ9kCu2yIe5NtRfwf9DVhY1/uBWEStPNDDA1uiE1nCDhpsi9HEHi6UgpiCTm16IWPIQ47oe96zljocd7aTF/T+Z3IlKzDD+l5zq3JuQhKVIJh1zHKiZfsBAIfnMq90UdqbzpXC31+vkthpitzI+PPujp+jZyQIkZARo2QBoRTsIjwot0gZskhjgVxugnb2FwPzktsWFQCLUlC60MdEt7jR3JK+ognrRW933aMwsLWwFELntaoO289pqeddwKW6E42lEwomLTBbqF4CN094erQT/paJsWocsC/LtE1eBLL2NrYRhHKb57IBXwVjcod42pfeEethiVE8tZ3b9aX5+1XL4LMYN5Lo3CZL+gynO3qPHvhEk2bAAzfLSmupMfjctVXWC+yr5BZhDx7GjyeRwid7B2ODODKRd3YlcSno6UysugiChTOx9Aw41CYxgck54HqJOJmf/C2oXPuj7ZWE0EVL8eEUpqF8wdv341DjdJuHgNCR0C/JCYgWuBCkw1+vB7l1sgCTHMxy1NO4a+ImsYjrqQ1ebTdRd0Ts6s9PcXRdpQuLp7Fcp6Y4Py5RN1/aXoTBORQwGBpfAEa4whzKqOoZCo6Dz8Xbe5FFtSURM//vIQOYtL8YhPJt4b0JJDFlZAtQqTA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5453.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(110136005)(8936002)(33656002)(66476007)(508600001)(66946007)(55016002)(122000001)(66556008)(76116006)(64756008)(38100700002)(66446008)(71200400001)(107886003)(316002)(9686003)(54906003)(7696005)(52536014)(5660300002)(6506007)(2906002)(38070700005)(82960400001)(8676002)(86362001)(186003)(26005)(966005)(83380400001)(53546011)(4326008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?TwB8uq6drBrl2tFb3eUkxkhDJGSJS0TTxkbt1hZb4+2FM5ymuLWHWYCre9xh?= =?us-ascii?Q?c0dJE1Vvze146Qy10d1l/sDr1rrq2BuvMOij4Q4SxIaAHK96CqVXFKafK8aJ?= =?us-ascii?Q?vy8EBKQoAML2FPTteZsScEBr7RNOJ2fF37ncvh6my7WwTM+G/MW/gMggNVqh?= =?us-ascii?Q?WoaB0TD3SPS4AwyykordPeyrFS/sbVIWf07yoxuTiYpTYol9k4IMmaIfEGoB?= =?us-ascii?Q?k9IbXdGGTzZc4Yal5im1Cv3iZNn6kP0lPuWbq91cuOd8EtYlsfhON00xSihs?= =?us-ascii?Q?HaIpzneB2+2+sBOAN7hL0hKOg3h9Ct6c1OKZCA2esE3uUJr+7jx+7J5hbjM5?= =?us-ascii?Q?zhD5WYzxX5U4AZ40bNw2o/X8aOntPojWquJ0/TVlyQxoJXEPUykvzpRAAWN2?= =?us-ascii?Q?yQXmNCeKPgL/XtcmPWa3+Zjnva73Vu85U2AITdlF+nGQflgxcxlc0xPjR++B?= =?us-ascii?Q?+7bx1rrbLQHDpdkt5BLxMXPZ3hYQvQC0lIGOoLsf4PskhWmyhS3p5l4yINAK?= =?us-ascii?Q?dOMeDzrUkyokXDNDNdrw7WxhWhNsV/DNKoITyVx5DfaKR4tDvNitLOCE3vKF?= =?us-ascii?Q?VCMqvAOtQjRs7ORVik9Fcatfexw+2MIfheqRixFRL54GZKYSYgw4RHQEl0Gy?= =?us-ascii?Q?hgCQLrnAgkrszrCJdxNdXXEBhouwejdATT3TE/RR4y2qMQSOwu0PF2DTRX7t?= =?us-ascii?Q?L/AG7k4SA64e6VXHymQ4abvelRhnHr3wOY+bN2SgMwAZ7DNxCQ9wpEzHyrnP?= =?us-ascii?Q?MZoV1PJFmc24mADxDqWNU0qTah5whfKSsEDJpbQqNJOcEwoOWm710/9Yh9jC?= =?us-ascii?Q?+qy6ca6cEyrNHf/8iG+qDSgDJAb9Z0s6cB7WL0WDTGaIGh/tt1Co0ITHcrIg?= =?us-ascii?Q?1QQsAXGONJdvGU4R0oZI23Z5K2w9guWTFIRjGNArNVxvEzW/2zfOcZhk0cfz?= =?us-ascii?Q?EdoNSN5g4WS6Gw8GCBmjMrjuwKQJq/F8IBBjfrKO7ZGv87WG+H1dj8j33HpL?= =?us-ascii?Q?m7Js0VC3UbP+lbXCBTvNemo4e01ljz4st2QTewmsGl5r9hxPTH4UBKhcbvGt?= =?us-ascii?Q?nNfdvr2biKh/6tLWgZrjyK63be+/ZA1/ccWs32iO1ay+2Me8a5mEO2/nMCoL?= =?us-ascii?Q?DhSgZe7Aw9/kHD5AlAVNk6BOTfKLYv6QgkH4eEYWEWuEf44u23cwcB7er5++?= =?us-ascii?Q?ccJtUhoZ0NJ6ZUY/VPNKNIn8rOvef4CLNjV8XWDAlCt0c0BNyhgMI6FLK7n0?= =?us-ascii?Q?VsIG5B0/Mhcy9qWFj3Iv0dyS9OoXyJd0ck9+Rb9vg7ByOzq4+Yh2Ck7L/hno?= =?us-ascii?Q?EhKMvVc7/YZtUosZKSxhsYeD?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5453.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7dfc8b22-661b-4591-12b5-08d98df97696 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Oct 2021 03:28:02.4092 (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: DTJSclfYYgaij9f8QhUzqL7dmbDDX4huFVI4VKIynYJi475dLb/mI+aI7Qvd2GPmvp5dJJjUc47s5JbdSr4dSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB3452 Return-Path: dandan.bi@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Dandan Bi Thanks, Dandan > -----Original Message----- > From: Ma, Hua > Sent: Tuesday, October 12, 2021 4:34 PM > To: devel@edk2.groups.io > Cc: Ma, Hua ; Wang, Jian J ; > Liming Gao ; Bi, Dandan ; > Ni, Ray > Subject: [PATCH v2] MdeModulePkg/Core/Dxe: Acquire a lock when iterating > gHandleList >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3680 >=20 > This patch fixes the following issue: >=20 > The global variable gHandleList is a linked list. > This list is locked when a entry is added or removed from the list, but t= here is no > lock when iterating this list in function CoreValidateHandle(). > It can lead to "Handle.c (76): CR has Bad Signature" assertion if the ite= rated > entry in the list is just removed by other task during iterating. > Locking the list when iterating can fix this issue. >=20 > v2 changes: > - Add lock check and comments in CoreGetProtocolInterface() before calli= ng > CoreValidateHandle() > - Update the comments in CoreValidateHandle() header file >=20 > v1: https://edk2.groups.io/g/devel/topic/86233569 >=20 > Cc: Jian J Wang > Cc: Liming Gao > Cc: Dandan Bi > Cc: Ray Ni > Signed-off-by: Hua Ma > --- > MdeModulePkg/Core/Dxe/Hand/DriverSupport.c | 10 ++-- > MdeModulePkg/Core/Dxe/Hand/Handle.c | 56 +++++++++++++++------- > MdeModulePkg/Core/Dxe/Hand/Handle.h | 5 +- > MdeModulePkg/Core/Dxe/Hand/Notify.c | 2 +- > 4 files changed, 50 insertions(+), 23 deletions(-) >=20 > diff --git a/MdeModulePkg/Core/Dxe/Hand/DriverSupport.c > b/MdeModulePkg/Core/Dxe/Hand/DriverSupport.c > index feabf12faf..eb8a765d2c 100644 > --- a/MdeModulePkg/Core/Dxe/Hand/DriverSupport.c > +++ b/MdeModulePkg/Core/Dxe/Hand/DriverSupport.c > @@ -68,7 +68,7 @@ CoreConnectController ( > // > // Make sure ControllerHandle is valid > // > - Status =3D CoreValidateHandle (ControllerHandle); > + Status =3D CoreValidateHandle (ControllerHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > @@ -154,7 +154,7 @@ CoreConnectController ( > // > // Make sure the DriverBindingHandle is valid > // > - Status =3D CoreValidateHandle (ControllerHandle); > + Status =3D CoreValidateHandle (ControllerHandle, TRUE); > if (EFI_ERROR (Status)) { > // > // Release the protocol lock on the handle database @@ -268,7 +268= ,7 @@ > AddSortedDriverBindingProtocol ( > // > // Make sure the DriverBindingHandle is valid > // > - Status =3D CoreValidateHandle (DriverBindingHandle); > + Status =3D CoreValidateHandle (DriverBindingHandle, FALSE); > if (EFI_ERROR (Status)) { > return; > } > @@ -746,7 +746,7 @@ CoreDisconnectController ( > // > // Make sure ControllerHandle is valid > // > - Status =3D CoreValidateHandle (ControllerHandle); > + Status =3D CoreValidateHandle (ControllerHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > @@ -755,7 +755,7 @@ CoreDisconnectController ( > // Make sure ChildHandle is valid if it is not NULL > // > if (ChildHandle !=3D NULL) { > - Status =3D CoreValidateHandle (ChildHandle); > + Status =3D CoreValidateHandle (ChildHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > diff --git a/MdeModulePkg/Core/Dxe/Hand/Handle.c > b/MdeModulePkg/Core/Dxe/Hand/Handle.c > index 6eccb41ecb..46f67d3d6a 100644 > --- a/MdeModulePkg/Core/Dxe/Hand/Handle.c > +++ b/MdeModulePkg/Core/Dxe/Hand/Handle.c > @@ -55,31 +55,46 @@ CoreReleaseProtocolLock ( > Check whether a handle is a valid EFI_HANDLE >=20 > @param UserHandle The handle to check > + @param IsLocked The protocol lock is acquried or not >=20 > @retval EFI_INVALID_PARAMETER The handle is NULL or not a valid > EFI_HANDLE. > + @retval EFI_NOT_FOUND The handle is not found in the handle > database. > @retval EFI_SUCCESS The handle is valid EFI_HANDLE. >=20 > **/ > EFI_STATUS > CoreValidateHandle ( > - IN EFI_HANDLE UserHandle > + IN EFI_HANDLE UserHandle, > + IN BOOLEAN IsLocked > ) > { > IHANDLE *Handle; > LIST_ENTRY *Link; > + EFI_STATUS Status; >=20 > if (UserHandle =3D=3D NULL) { > return EFI_INVALID_PARAMETER; > } >=20 > + if (IsLocked) { > + ASSERT_LOCKED(&gProtocolDatabaseLock); > + } else { > + CoreAcquireProtocolLock (); > + } > + > + Status =3D EFI_NOT_FOUND; > for (Link =3D gHandleList.BackLink; Link !=3D &gHandleList; Link =3D L= ink->BackLink) { > Handle =3D CR (Link, IHANDLE, AllHandles, EFI_HANDLE_SIGNATURE); > if (Handle =3D=3D (IHANDLE *) UserHandle) { > - return EFI_SUCCESS; > + Status =3D EFI_SUCCESS; > + break; > } > } >=20 > - return EFI_INVALID_PARAMETER; > + if (!IsLocked) { > + CoreReleaseProtocolLock (); > + } > + return Status; > } >=20 >=20 > @@ -428,7 +443,7 @@ CoreInstallProtocolInterfaceNotify ( > // > InsertTailList (&gHandleList, &Handle->AllHandles); > } else { > - Status =3D CoreValidateHandle (Handle); > + Status =3D CoreValidateHandle (Handle, TRUE); > if (EFI_ERROR (Status)) { > DEBUG((DEBUG_ERROR, "InstallProtocolInterface: input handle at 0x%= x is > invalid\n", Handle)); > goto Done; > @@ -723,7 +738,7 @@ CoreUninstallProtocolInterface ( > // > // Check that UserHandle is a valid handle > // > - Status =3D CoreValidateHandle (UserHandle); > + Status =3D CoreValidateHandle (UserHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > @@ -899,7 +914,16 @@ CoreGetProtocolInterface ( > IHANDLE *Handle; > LIST_ENTRY *Link; >=20 > - Status =3D CoreValidateHandle (UserHandle); > + // > + // The gProtocolDatabaseLock must be owned // > + ASSERT_LOCKED(&gProtocolDatabaseLock); > + > + // > + // The gProtocolDatabaseLock is owned // Call CoreValidateHandle () > + with IsLocked =3D=3D TRUE // Status =3D CoreValidateHandle (UserHandl= e, > + TRUE); > if (EFI_ERROR (Status)) { > return NULL; > } > @@ -1013,7 +1037,7 @@ CoreOpenProtocol ( > // > // Check for invalid UserHandle > // > - Status =3D CoreValidateHandle (UserHandle); > + Status =3D CoreValidateHandle (UserHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > @@ -1023,11 +1047,11 @@ CoreOpenProtocol ( > // > switch (Attributes) { > case EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER : > - Status =3D CoreValidateHandle (ImageHandle); > + Status =3D CoreValidateHandle (ImageHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > - Status =3D CoreValidateHandle (ControllerHandle); > + Status =3D CoreValidateHandle (ControllerHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > @@ -1037,17 +1061,17 @@ CoreOpenProtocol ( > break; > case EFI_OPEN_PROTOCOL_BY_DRIVER : > case EFI_OPEN_PROTOCOL_BY_DRIVER | EFI_OPEN_PROTOCOL_EXCLUSIVE : > - Status =3D CoreValidateHandle (ImageHandle); > + Status =3D CoreValidateHandle (ImageHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > - Status =3D CoreValidateHandle (ControllerHandle); > + Status =3D CoreValidateHandle (ControllerHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > break; > case EFI_OPEN_PROTOCOL_EXCLUSIVE : > - Status =3D CoreValidateHandle (ImageHandle); > + Status =3D CoreValidateHandle (ImageHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > @@ -1249,16 +1273,16 @@ CoreCloseProtocol ( > // > // Check for invalid parameters > // > - Status =3D CoreValidateHandle (UserHandle); > + Status =3D CoreValidateHandle (UserHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > - Status =3D CoreValidateHandle (AgentHandle); > + Status =3D CoreValidateHandle (AgentHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > if (ControllerHandle !=3D NULL) { > - Status =3D CoreValidateHandle (ControllerHandle); > + Status =3D CoreValidateHandle (ControllerHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > @@ -1443,7 +1467,7 @@ CoreProtocolsPerHandle ( > UINTN ProtocolCount; > EFI_GUID **Buffer; >=20 > - Status =3D CoreValidateHandle (UserHandle); > + Status =3D CoreValidateHandle (UserHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > diff --git a/MdeModulePkg/Core/Dxe/Hand/Handle.h > b/MdeModulePkg/Core/Dxe/Hand/Handle.h > index 83eb2b9f3a..20d886beca 100644 > --- a/MdeModulePkg/Core/Dxe/Hand/Handle.h > +++ b/MdeModulePkg/Core/Dxe/Hand/Handle.h > @@ -244,14 +244,17 @@ CoreReleaseProtocolLock ( > Check whether a handle is a valid EFI_HANDLE >=20 > @param UserHandle The handle to check > + @param IsLocked The protocol lock is acquried or not >=20 > @retval EFI_INVALID_PARAMETER The handle is NULL or not a valid > EFI_HANDLE. > + @retval EFI_NOT_FOUND The handle is not found in the handle > database. > @retval EFI_SUCCESS The handle is valid EFI_HANDLE. >=20 > **/ > EFI_STATUS > CoreValidateHandle ( > - IN EFI_HANDLE UserHandle > + IN EFI_HANDLE UserHandle, > + IN BOOLEAN IsLocked > ); >=20 > // > diff --git a/MdeModulePkg/Core/Dxe/Hand/Notify.c > b/MdeModulePkg/Core/Dxe/Hand/Notify.c > index 553413a350..f4e7c01e96 100644 > --- a/MdeModulePkg/Core/Dxe/Hand/Notify.c > +++ b/MdeModulePkg/Core/Dxe/Hand/Notify.c > @@ -188,7 +188,7 @@ CoreReinstallProtocolInterface ( > PROTOCOL_INTERFACE *Prot; > PROTOCOL_ENTRY *ProtEntry; >=20 > - Status =3D CoreValidateHandle (UserHandle); > + Status =3D CoreValidateHandle (UserHandle, FALSE); > if (EFI_ERROR (Status)) { > return Status; > } > -- > 2.32.0.windows.2