From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web08.3687.1634099147885685095 for ; Tue, 12 Oct 2021 21:25:49 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=taC46UfW; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: jian.j.wang@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10135"; a="208145570" X-IronPort-AV: E=Sophos;i="5.85,369,1624345200"; d="scan'208";a="208145570" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 21:25:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,369,1624345200"; d="scan'208";a="480636072" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga007.jf.intel.com with ESMTP; 12 Oct 2021 21:25:33 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX603.amr.corp.intel.com (10.22.229.16) 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 21:25:33 -0700 Received: from orsmsx604.amr.corp.intel.com (10.22.229.17) by ORSMSX611.amr.corp.intel.com (10.22.229.24) 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 21:25:33 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx604.amr.corp.intel.com (10.22.229.17) 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 21:25:33 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.175) 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.2242.12; Tue, 12 Oct 2021 21:25:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F/wSoJxMTJlbuGn5g0dJqL/KliZk1CpLe2VaqnxfTevdP/82S5E/Bt113jcyv2CmQwX5pX33ICd/JXfakR+OTSW5a8uEJQZDnyXPjDEu2I/zx1NE/QbRb2g6WqprprX4fvzVulg9h9lN9rdf+eswhDbFuZMBwBhVHrpyNzzpN0lnAMbdMa8oQRSzJnQj9YQQzwfFC1s21DxwdOL2vYjqo/vN6NGNMNmrEmg0FqCTVSgQO+g7IAWPgLOMscZ4DdDdiP7GfsAqRD12B68c94Mb0AN8wROHJqXl4kOm+9kPK2yZBkE1OO2J0QU5tinN4ieaeT9L2zSU8v26M7jZNq7Wbg== 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=P8eAYdNL10QJBfZGzl1sOShpwjNhz17BBKV8qlGCAtI=; b=jmRUQ+ocfY4XK5wCDWQaA1Q0z7j9QP+ysTVV9T3bxUN5m0F9CeGvGb47rHBK+U2RorsDbSvRntk9a1hITOc0QOzszUhEYLN4FMRDEAiu/fP7cswc+HlVVxdy2ViU/B4QPf2gi5Ww76AlYQ6h+lhioaGO+bqN8sPqOcE8S0UTBgM+Hf1Zxn7eeVM3TR4BgtNCvb1QzuE9pMdCEMu4L0aWvajUukEJpML0HBX02rfzOUlFux/YHa3KCGRj1+qSH7eINYWWTuFWJE2f/HpyzRVBvXTv7Zl4NrGvtmS7lO5qiXjQJbtTg1Mp57QVlXQu9uYQwvfXp7+nAWqrYLXz/uk1xA== 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=P8eAYdNL10QJBfZGzl1sOShpwjNhz17BBKV8qlGCAtI=; b=taC46UfWtRYYnUPIrfYYSNbpYlyZ0F2tNu871mhrhcJU1MdovghycSN51dvvzAlKfEBXTZo7eeEs42xblI0xYWmzYYmIPD1m7TUgR19ObrXKtn7L/dvTm2EyDqSajMixHJVoPxMl/2FUP3vQkx8HkMCeij2D1iUd++y+Uv8aWBc= Received: from CO1PR11MB4945.namprd11.prod.outlook.com (2603:10b6:303:9c::8) by MWHPR11MB2000.namprd11.prod.outlook.com (2603:10b6:300:2b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4608.14; Wed, 13 Oct 2021 04:25:30 +0000 Received: from CO1PR11MB4945.namprd11.prod.outlook.com ([fe80::752d:e1b:2ca:978f]) by CO1PR11MB4945.namprd11.prod.outlook.com ([fe80::752d:e1b:2ca:978f%9]) with mapi id 15.20.4587.029; Wed, 13 Oct 2021 04:25:30 +0000 From: "Wang, Jian J" To: "Ma, Hua" , "devel@edk2.groups.io" CC: Liming Gao , "Bi, Dandan" , "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: AQHXv0QEIfmAgZtwuUu1UEhtJdGLMKvQUnWA Date: Wed, 13 Oct 2021 04:25:30 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.200.16 dlp-product: dlpe-windows 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: 16eb2344-59be-4204-ec4d-08d98e017de1 x-ms-traffictypediagnostic: MWHPR11MB2000: 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: 3iVS/F40+sT/o53N6c7+ohNKzsI5pgVL7kwzx6w/PoEwpS1YIqNlIA2ZW4UB40zZxiOPJY9IFAI1tzNoTvXtdFnx3x/cgk9uS+TaJBkJ+BfYxy8kP7sXwBu0V4JKIbatxkSecFP3hMY0xhLUcP5U3mhLcR7o1VhQHSr1diQVNLjElBBeSIhw6SSDOhqguvR1MN5dd24C+XeS5oLHvCWikUu2+UytZ/4fqxtg4Bvru/sUaeM3oEQDAmq/RvFoevC/1dZ7NNtoq54ODFNwf0P//6IWqCwyynQiLpAp5APhXWTVFbpwS5oI5UsUYybd7TZdvmKHdDk0SVhj17mG2ias+cva5cALe7j/bjLFT4QJIqs0VyAzSDrlrK0JTqmh5OqwHgyDMEASWSnj6puZl8HdcH1IQyEbM/xfOollBt1bdWHL/knL7Hy9lNJBof2l2Zo+dd0tF24ST5aaeKrfgd1vvgShylCroGHVTLlk/spIUogDtBwy6Yjd7pGuUSJ/OCq8wnEJf7h5+ODAKQlTcm2ovq3qAiy5ZRCvD8McKfrv/2xsZdpzw7j0UeJUGJTyBN9jKnnj4fM6BDqkGagyiqcRs+wNvKwIDN2ODwFY9xPAHIJl1Uv1exvuG/fNodBWBr5DbhQ3WOYR7/5VvWUz/EerJw1Kg06vgZ54EDKjBlv/FOyFqv5jLudDeMpy6iJTjuWGqEZJAsaZp8ATekV7IGY8rrQKI1NsvgG8T+eHWtqkkrAatWaj2X4zeRGZDO78hZXaeRgsXtBaBCrPHngjpJ3ZqRw/ecYCroxaSD5OxyH7n/gKpGIJ/3f/agzS5PBrNChcGCPcuOBJGTQG6kPm7Uh5ag== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4945.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(2906002)(9686003)(71200400001)(316002)(107886003)(55016002)(110136005)(54906003)(38100700002)(82960400001)(38070700005)(186003)(122000001)(26005)(4326008)(66556008)(53546011)(8676002)(83380400001)(76116006)(86362001)(66946007)(64756008)(66446008)(66476007)(8936002)(6506007)(7696005)(33656002)(52536014)(966005)(508600001)(5660300002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?QQ+sdtzQuUr8PG8Qy05OAwoWqCuopwn41Lqe9TJ22mRrg9jxarTSJWAudKBV?= =?us-ascii?Q?/kACt/VCkU4EHdUjmBztpLQlUujamaIWQpuzWajVMtvV8u7kfr9SQ/paaUAZ?= =?us-ascii?Q?anWU9FT4YCQmmm8xGViuqYyrF3OeT86TgPoymB1QGpbluUYdaBuN033mWs7K?= =?us-ascii?Q?H5uxzMGD7GLKPLRImyWb9C2XQoCNfThO6h05eei46Lf8wnA9p4+b2gWQZx7f?= =?us-ascii?Q?Je7vYNGt0vY/Eqy3C+r2QNOnUe0PR8QJr3cOX+yKs164AvvVdGeWAWY5q/ap?= =?us-ascii?Q?Kw+GiOWs7jI9w/8hrvjU/Wbk9/Ri7HVAwN7qkM+FHCTwTOuDyj8Qv3DwuNZD?= =?us-ascii?Q?ugoHgeUJ3tp9WJJeNeyrzmcv95bHbikRioGUgygO5XLetAGC+DQI6ogieD2F?= =?us-ascii?Q?lYkCtbG35hmXabP9T+7nPnTvlhDJJoEab0zxzqXF9U+k6a/TvFkgv2CxZXC/?= =?us-ascii?Q?+HAVqodQgGtNaz3AUSrBy/nN+hcImpFGdpDxRGH6mUjZrp9DlfYcVPEyPQ/S?= =?us-ascii?Q?bqNZ+KO0oLVjD8WrTvHHOBGIX0lAhvQLDZFqoECp8wsOVW9QRCcUwt0s8pia?= =?us-ascii?Q?X05A3C+aDMkdfqt9QG84OgwyDGpb/PvngGIXDDKTEPx8grXILdjiQ3xCUL6v?= =?us-ascii?Q?RTYqcUfOyw+jxR9q2uTmOasR6S91CMO5Z6ab21dMkpzvXEb/jshISAe6IQx/?= =?us-ascii?Q?9QDvXsPs2rd0rc9gaoBiE13Hzq3zSaFKpAo0s4kC6GH3heQ6oqWcLunIa2Vd?= =?us-ascii?Q?0Yyq4P7JjNV76xsZEsaSGBu+kB2xkW0tGTntgDsZ9pjguiSP66pAXVEDHIyG?= =?us-ascii?Q?PtWlG6T3s+BwxqD/CN5Rhsp/K0QsGmzitbGN+1g9aRVlOWdiXPr5zZb8tMgG?= =?us-ascii?Q?Gg16wEpiqfyClKmfA/1uadpT/gTIk6LFQwH0JI5lDyrlTtLq9xNdy1GIaZZY?= =?us-ascii?Q?YFLYph/6BDlgU3N7mRgBpMhMFAHk+WtLgtm07BhG4FmS0Zkoieh+VNQqVNFI?= =?us-ascii?Q?o5D/Y1GTigLSbNDjLc0eTioB/eqAB1sd2LMW3gkNZ34DRDzcLf9Fby7Z4s8I?= =?us-ascii?Q?4pjzlNHLLq4PQeTZgEEF1PfkXxXdlLLslWQry/grVRHVBG609XEshqwgw649?= =?us-ascii?Q?dkIwIgGwhIGXRLlVEf7oO8X1yhJa2sWUTo4Y3yFSx2T7HCtQxWh21UTcRcGU?= =?us-ascii?Q?NAqb7jAud8lqRIPFa0TM7lxNsqdyg+frmEOYkGtqs3IHdRhquJnjk3MqH3SF?= =?us-ascii?Q?rHsEmFiAo8YfdFACZxJNFm3RyX9Y595KW3KevBConb2snO4zAX1udWGOjuR2?= =?us-ascii?Q?Shyf7PjJVq85BTcfNmRv0Kdw?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4945.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16eb2344-59be-4204-ec4d-08d98e017de1 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Oct 2021 04:25:30.6212 (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: jWlaNqU3nydtUjeeHzjnoMz/ZqJwbWKxzVowUKFFuzdhZ/i5wZu9gDBJPhdfkOvpwIvxmsVcpO/hdZJT7fZM+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB2000 Return-Path: jian.j.wang@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Hua, It looks a bit odd to me to add 'IsLocked' parameter and acquire lock inside CoreValidateHandle() if it's FALSE. Maybe we can keep the function prototype as-is but do something like below: a) Just keep ASSERT_LOCKED(&gProtocolDatabaseLock) in CoreValidateHandl= e() b) Call CoreAcquireProtocolLock() before any calling of CoreValidateHan= dle() and CoreReleaseProtocolLock() afterwards. Actually, CoreAcquireProtocolLock() is always called wherever CoreValidateH= andle() is called. The problem is that, in many cases, CoreAcquireProtocolLock() is= called after CoreValidateHandle(). We can simply move the calling of CoreAcquirePr= otocolLock() before CoreValidateHandle() to fix this problem. For those cases CoreAcquireProtocolLock() is not called at all, just simply= add it. Regards, Jian > -----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 there is no lock when iterating this list in function > CoreValidateHandle(). > It can lead to "Handle.c (76): CR has Bad Signature" assertion if the > iterated 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 > calling 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 d= atabase. > @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 (UserHandle, 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 d= atabase. > @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