From nobody Sun Apr 28 01:17:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail(p=none dis=none) header.from=intel.com Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 153008031071811.593779024023092; Tue, 26 Jun 2018 23:18:30 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 06268202E53F4; Tue, 26 Jun 2018 23:18:30 -0700 (PDT) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0F5B3202E53EF for ; Tue, 26 Jun 2018 23:18:29 -0700 (PDT) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Jun 2018 23:18:28 -0700 Received: from shwdeopenpsi114.ccr.corp.intel.com ([10.239.157.135]) by orsmga005.jf.intel.com with ESMTP; 26 Jun 2018 23:18:27 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=dandan.bi@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,278,1526367600"; d="scan'208";a="235935507" From: Dandan Bi To: edk2-devel@lists.01.org Date: Wed, 27 Jun 2018 14:16:23 +0800 Message-Id: <20180627061623.169516-2-dandan.bi@intel.com> X-Mailer: git-send-email 2.14.3.windows.1 In-Reply-To: <20180627061623.169516-1-dandan.bi@intel.com> References: <20180627061623.169516-1-dandan.bi@intel.com> Subject: [edk2] [patch] MdeModulePkg/PerformanceLib: Add NULL pointer check X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hao Wu , Liming Gao MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" 1. Add NULL pointer check for the "Guid" parameter when handle FPDT_DUAL_GUID_STRING_EVENT_TYPE. 2. Make the code logic in DxeCore/SmmCore/PeiPerformanceLib aligned when handle FPDT_DUAL_GUID_STRING_EVENT_TYPE. Cc: Liming Gao Cc: Hao Wu Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Dandan Bi Reviewed-by: Hao Wu --- .../DxeCorePerformanceLib/DxeCorePerformanceLib.c | 18 ++++++++++++--= ---- .../Library/PeiPerformanceLib/PeiPerformanceLib.c | 13 ++++++++----- .../SmmCorePerformanceLib/SmmCorePerformanceLib.c | 18 ++++++++++++--= ---- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceL= ib.c b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.c index efff5134c7b..6e0c328c635 100644 --- a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.c +++ b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.c @@ -1109,18 +1109,17 @@ InsertFpdtRecord ( =20 case PERF_EVENTSIGNAL_START_ID: case PERF_EVENTSIGNAL_END_ID: case PERF_CALLBACK_START_ID: case PERF_CALLBACK_END_ID: - if (String =3D=3D NULL) { + if (String =3D=3D NULL || Guid =3D=3D NULL) { return EFI_INVALID_PARAMETER; } - // - // Cache the event guid in string event record when PcdEdkiiFpdtString= RecordEnableOnly =3D=3D TRUE - // - CopyGuid (&ModuleGuid, Guid); StringPtr =3D String; + if (AsciiStrLen (String) =3D=3D 0) { + StringPtr =3D "unknown name"; + } if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) { FpdtRecordPtr.DualGuidStringEvent->Header.Type =3D FPDT_DUAL_GU= ID_STRING_EVENT_TYPE; FpdtRecordPtr.DualGuidStringEvent->Header.Length =3D sizeof (FPDT= _DUAL_GUID_STRING_EVENT_RECORD); FpdtRecordPtr.DualGuidStringEvent->Header.Revision =3D FPDT_RECORD_= REVISION_1; FpdtRecordPtr.DualGuidStringEvent->ProgressID =3D PerfId; @@ -1194,11 +1193,18 @@ InsertFpdtRecord ( FpdtRecordPtr.DynamicStringEvent->Header.Type =3D FPDT_DYNAMIC_S= TRING_EVENT_TYPE; FpdtRecordPtr.DynamicStringEvent->Header.Length =3D sizeof (FPDT_D= YNAMIC_STRING_EVENT_RECORD); FpdtRecordPtr.DynamicStringEvent->Header.Revision =3D FPDT_RECORD_RE= VISION_1; FpdtRecordPtr.DynamicStringEvent->ProgressID =3D PerfId; FpdtRecordPtr.DynamicStringEvent->Timestamp =3D TimeStamp; - CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, &ModuleGuid, sizeof = (FpdtRecordPtr.DynamicStringEvent->Guid)); + if (Guid !=3D NULL) { + // + // Cache the event guid in string event record. + // + CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, Guid, sizeof (Fpdt= RecordPtr.DynamicStringEvent->Guid)); + } else { + CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, &ModuleGuid, sizeo= f (FpdtRecordPtr.DynamicStringEvent->Guid)); + } if (AsciiStrLen (StringPtr) =3D=3D 0) { StringPtr =3D "unknown name"; } CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEv= ent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length); =20 diff --git a/MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.c b/M= deModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.c index cd1b0e34ef7..3a44a0a438e 100644 --- a/MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.c +++ b/MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.c @@ -75,14 +75,14 @@ GetFpdtRecordPtr ( // // PEI Performance HOB was found, then return the existing one. // PeiFirmwarePerformance =3D (UINT8*)GET_GUID_HOB_DATA (GuidHob); *PeiPerformanceLogHeader =3D (FPDT_PEI_EXT_PERF_HEADER *)PeiFirmwarePe= rformance; - if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeade= r)->SizeOfAllEntries + RecordSize > (UINTN)(PeiPerformanceLogEntries * PEI_= MAX_RECORD_SIZE)) { + if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeade= r)->SizeOfAllEntries + RecordSize > (PeiPerformanceLogEntries * PEI_MAX_REC= ORD_SIZE)) { (*PeiPerformanceLogHeader)->HobIsFull =3D TRUE; } - if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeade= r)->SizeOfAllEntries + RecordSize <=3D (UINTN)(PeiPerformanceLogEntries * P= EI_MAX_RECORD_SIZE)) { + if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeade= r)->SizeOfAllEntries + RecordSize <=3D (PeiPerformanceLogEntries * PEI_MAX_= RECORD_SIZE)) { FpdtRecordPtr->RecordHeader =3D (EFI_ACPI_5_0_FPDT_PERFORMANCE_RECOR= D_HEADER *)(PeiFirmwarePerformance + sizeof (FPDT_PEI_EXT_PERF_HEADER) + (*= PeiPerformanceLogHeader)->SizeOfAllEntries); break; } // // Previous HOB is used, then find next one. @@ -421,23 +421,26 @@ InsertFpdtRecord ( =20 case PERF_EVENTSIGNAL_START_ID: case PERF_EVENTSIGNAL_END_ID: case PERF_CALLBACK_START_ID: case PERF_CALLBACK_END_ID: - if (String !=3D NULL && AsciiStrLen (String) !=3D 0) { - StringPtr =3D String; - } else { + if (String =3D=3D NULL || Guid =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + StringPtr =3D String; + if (AsciiStrLen (String) =3D=3D 0) { StringPtr =3D "unknown name"; } if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) { FpdtRecordPtr.DualGuidStringEvent->Header.Type =3D FPDT_DUAL_GU= ID_STRING_EVENT_TYPE; FpdtRecordPtr.DualGuidStringEvent->Header.Length =3D sizeof (FPDT= _DUAL_GUID_STRING_EVENT_RECORD); FpdtRecordPtr.DualGuidStringEvent->Header.Revision =3D FPDT_RECORD_= REVISION_1; FpdtRecordPtr.DualGuidStringEvent->ProgressID =3D PerfId; FpdtRecordPtr.DualGuidStringEvent->Timestamp =3D TimeStamp; CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid1, ModuleGuid, size= of (FpdtRecordPtr.DualGuidStringEvent->Guid1)); CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid2, Guid, sizeof (Fp= dtRecordPtr.DualGuidStringEvent->Guid2)); + CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DualGuidStrin= gEvent->String, StringPtr, &FpdtRecordPtr.DualGuidStringEvent->Header.Lengt= h); } break; =20 case PERF_EVENT_ID: case PERF_FUNCTION_START_ID: diff --git a/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceL= ib.c b/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.c index 0c00fb51e82..f18c3fb60df 100644 --- a/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.c +++ b/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.c @@ -647,18 +647,17 @@ InsertFpdtRecord ( =20 case PERF_EVENTSIGNAL_START_ID: case PERF_EVENTSIGNAL_END_ID: case PERF_CALLBACK_START_ID: case PERF_CALLBACK_END_ID: - if (String =3D=3D NULL) { + if (String =3D=3D NULL || Guid =3D=3D NULL) { return EFI_INVALID_PARAMETER; } - // - // Cache the event guid in string event record when PcdEdkiiFpdtString= RecordEnableOnly =3D=3D TRUE - // - CopyGuid (&ModuleGuid, Guid); StringPtr =3D String; + if (AsciiStrLen (String) =3D=3D 0) { + StringPtr =3D "unknown name"; + } if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) { FpdtRecordPtr.DualGuidStringEvent->Header.Type =3D FPDT_DUAL_GU= ID_STRING_EVENT_TYPE; FpdtRecordPtr.DualGuidStringEvent->Header.Length =3D sizeof (FPDT= _DUAL_GUID_STRING_EVENT_RECORD); FpdtRecordPtr.DualGuidStringEvent->Header.Revision =3D FPDT_RECORD_= REVISION_1; FpdtRecordPtr.DualGuidStringEvent->ProgressID =3D PerfId; @@ -732,11 +731,18 @@ InsertFpdtRecord ( FpdtRecordPtr.DynamicStringEvent->Header.Type =3D FPDT_DYNAMIC_S= TRING_EVENT_TYPE; FpdtRecordPtr.DynamicStringEvent->Header.Length =3D sizeof (FPDT_D= YNAMIC_STRING_EVENT_RECORD); FpdtRecordPtr.DynamicStringEvent->Header.Revision =3D FPDT_RECORD_RE= VISION_1; FpdtRecordPtr.DynamicStringEvent->ProgressID =3D PerfId; FpdtRecordPtr.DynamicStringEvent->Timestamp =3D TimeStamp; - CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, &ModuleGuid, sizeof = (FpdtRecordPtr.DynamicStringEvent->Guid)); + if (Guid !=3D NULL) { + // + // Cache the event guid in string event record. + // + CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, Guid, sizeof (Fpdt= RecordPtr.DynamicStringEvent->Guid)); + } else { + CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, &ModuleGuid, sizeo= f (FpdtRecordPtr.DynamicStringEvent->Guid)); + } if (AsciiStrLen (StringPtr) =3D=3D 0) { StringPtr =3D "unknown name"; } CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DynamicStringEv= ent->String, StringPtr, &FpdtRecordPtr.DynamicStringEvent->Header.Length); =20 --=20 2.14.3.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel