From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web10.9902.1628175452546461631 for ; Thu, 05 Aug 2021 07:57:32 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@linux.microsoft.com header.s=default header.b=bahouI9B; spf=pass (domain: linux.microsoft.com, ip: 13.77.154.182, mailfrom: mikuback@linux.microsoft.com) Received: from localhost.localdomain (unknown [167.220.2.74]) by linux.microsoft.com (Postfix) with ESMTPSA id 2AE0220B36EA; Thu, 5 Aug 2021 07:57:32 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 2AE0220B36EA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1628175452; bh=+pEZF4kJao5/gP/kyvgygi0LIB0R6Xw2u4nh183FEps=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bahouI9BWuu0ODXrXQQvELCY93kTQoL44eZCXlkV/ZWyMc5HB0XXeM3Omo55j8Mu4 ZtTNUKC4TeUijMGDHGoXkPdcE3j1sL8WMHAPaPzDVHAS8i0Ma2+xIA+wCz+bav1dYE BHzf3F5mUePIzcLo7ta2meb6Xj6FfWQxof5fFyN4= From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Chasel Chiu , Nate DeSimone , Liming Gao , Eric Dong Subject: [edk2-platforms][PATCH v1 1/5] MinPlatformPkg/TestPointCheckLib: Fix MessageLength cast issue Date: Thu, 5 Aug 2021 10:57:02 -0400 Message-Id: <20210805145706.2470-2-mikuback@linux.microsoft.com> X-Mailer: git-send-email 2.28.0.windows.1 In-Reply-To: <20210805145706.2470-1-mikuback@linux.microsoft.com> References: <20210805145706.2470-1-mikuback@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Kubacki REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3531 The MessageLength field of EFI_MM_COMMUNICATE_HEADER as defined in MdePkg/Include/Protocol/MmCommunication.h was updated to a fixed size as opposed to UINTN to avoid ambiguity between different caller enviornments. This change updates the MessageLength usage in MinPlatformPkg to support the new field structure, in turn, fixing a build issue. Original edk2 change: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3398 Cc: Chasel Chiu Cc: Nate DeSimone Cc: Liming Gao Cc: Eric Dong Signed-off-by: Michael Kubacki --- Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeCheckSmi= HandlerInstrument.c | 4 ++-- Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeTestPoin= tCheckLib.c | 15 ++++++++++++++- Platform/Intel/MinPlatformPkg/Test/TestPointStubDxe/TestPointStubDxe.c = | 10 +++++----- Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeTestPoin= tCheckLib.inf | 1 + 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib= /DxeCheckSmiHandlerInstrument.c b/Platform/Intel/MinPlatformPkg/Test/Libr= ary/TestPointCheckLib/DxeCheckSmiHandlerInstrument.c index 3ceeb821fb95..80e8d26f4e1d 100644 --- a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeChe= ckSmiHandlerInstrument.c +++ b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeChe= ckSmiHandlerInstrument.c @@ -106,7 +106,7 @@ GetSmiHandlerProfileDatabase( CommGetInfo->Header.ReturnStatus =3D (UINT64)-1; CommGetInfo->DataSize =3D 0; =20 - CommSize =3D sizeof(EFI_GUID) + sizeof(UINTN) + CommHeader->MessageLen= gth; + CommSize =3D OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)Com= mHeader->MessageLength; Status =3D SmmCommunication->Communicate(SmmCommunication, CommBuffer,= &CommSize); if (EFI_ERROR(Status)) { DEBUG ((DEBUG_INFO, "SmiHandlerProfile: SmmCommunication - %r\n", St= atus)); @@ -139,7 +139,7 @@ GetSmiHandlerProfileDatabase( CommGetData->Header.DataLength =3D sizeof(*CommGetData); CommGetData->Header.ReturnStatus =3D (UINT64)-1; =20 - CommSize =3D sizeof(EFI_GUID) + sizeof(UINTN) + CommHeader->MessageLen= gth; + CommSize =3D OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)Com= mHeader->MessageLength; Buffer =3D (UINT8 *)CommHeader + CommSize; Size -=3D CommSize; =20 diff --git a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib= /DxeTestPointCheckLib.c b/Platform/Intel/MinPlatformPkg/Test/Library/Test= PointCheckLib/DxeTestPointCheckLib.c index c012e0afcbaa..e5efbd059954 100644 --- a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeTes= tPointCheckLib.c +++ b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeTes= tPointCheckLib.c @@ -12,6 +12,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include +#include #include #include #include @@ -520,6 +521,7 @@ TestPointDxeSmmReadyToBootSmmPageProtection ( UINTN MemoryAttributesTa= bleSize; EFI_STATUS Status; UINTN CommSize; + UINT64 LongCommSize; UINT8 *CommBuffer; EFI_SMM_COMMUNICATE_HEADER *CommHeader; EFI_SMM_COMMUNICATION_PROTOCOL *SmmCommunication; @@ -620,7 +622,18 @@ TestPointDxeSmmReadyToBootSmmPageProtection ( (UINTN)CommData->UefiMemoryAttributeTableSize ); =20 - CommSize =3D OFFSET_OF(EFI_SMM_COMMUNICATE_HEADER, Data) + CommHeader-= >MessageLength; + Status =3D SafeUint64Add (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data)= , CommHeader->MessageLength, &LongCommSize); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "TestPointDxeSmmReadyToBootSmmPageProtection: Lo= ngCommSize calculation - %r\n", Status)); + return EFI_SUCCESS; + } + + Status =3D SafeUint64ToUintn (LongCommSize, &CommSize); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_INFO, "TestPointDxeSmmReadyToBootSmmPageProtection: Co= mmSize conversion - %r\n", Status)); + return EFI_SUCCESS; + } + Status =3D SmmCommunication->Communicate(SmmCommunication, CommBuffer,= &CommSize); if (EFI_ERROR(Status)) { DEBUG ((DEBUG_INFO, "TestPointDxeSmmReadyToBootSmmPageProtection: Sm= mCommunication - %r\n", Status)); diff --git a/Platform/Intel/MinPlatformPkg/Test/TestPointStubDxe/TestPoin= tStubDxe.c b/Platform/Intel/MinPlatformPkg/Test/TestPointStubDxe/TestPoin= tStubDxe.c index 3cc5ccfef6f4..8416b36f56ae 100644 --- a/Platform/Intel/MinPlatformPkg/Test/TestPointStubDxe/TestPointStubDx= e.c +++ b/Platform/Intel/MinPlatformPkg/Test/TestPointStubDxe/TestPointStubDx= e.c @@ -122,7 +122,7 @@ GetTestPointDataSmm ( CommGetInfo->Header.ReturnStatus =3D (UINT64)-1; CommGetInfo->DataSize =3D 0; =20 - CommSize =3D sizeof(EFI_GUID) + sizeof(UINTN) + CommHeader->MessageLen= gth; + CommSize =3D OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)Com= mHeader->MessageLength; Status =3D SmmCommunication->Communicate(SmmCommunication, CommBuffer,= &CommSize); if (EFI_ERROR(Status)) { DEBUG ((DEBUG_INFO, "SmiHandlerTestPoint: SmmCommunication - %r\n", = Status)); @@ -155,7 +155,7 @@ GetTestPointDataSmm ( CommGetData->Header.DataLength =3D sizeof(*CommGetData); CommGetData->Header.ReturnStatus =3D (UINT64)-1; =20 - CommSize =3D sizeof(EFI_GUID) + sizeof(UINTN) + CommHeader->MessageLen= gth; + CommSize =3D OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data) + (UINTN)Com= mHeader->MessageLength; Buffer =3D (UINT8 *)CommHeader + CommSize; Size -=3D CommSize; =20 @@ -233,7 +233,7 @@ PublishSmmTestPoint ( TestPoint =3D mSmmTestPointDatabase; while ((UINTN)TestPoint < (UINTN)mSmmTestPointDatabase + mSmmTestPoint= DatabaseSize) { TestPointSize =3D GetTestPointInfoSize (TestPoint, (UINTN)mSmmTestPo= intDatabase + mSmmTestPointDatabaseSize - (UINTN)TestPoint); - =20 + TestPointLibSetTable (TestPoint, TestPointSize); =20 TestPoint =3D (ADAPTER_INFO_PLATFORM_TEST_POINT *)((UINTN)TestPoint = + TestPointSize); @@ -286,7 +286,7 @@ OnReadyToBoot ( EFI_EVENT ReadyToBootLaterEvent; =20 gBS->CloseEvent (Event); - =20 + Status =3D gBS->CreateEvent ( EVT_NOTIFY_SIGNAL, TPL_CALLBACK, @@ -295,7 +295,7 @@ OnReadyToBoot ( &ReadyToBootLaterEvent ); ASSERT_EFI_ERROR (Status); - =20 + gBS->SignalEvent (ReadyToBootLaterEvent); } =20 diff --git a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib= /DxeTestPointCheckLib.inf b/Platform/Intel/MinPlatformPkg/Test/Library/Te= stPointCheckLib/DxeTestPointCheckLib.inf index 2ae1db4ee483..54b4015d6767 100644 --- a/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeTes= tPointCheckLib.inf +++ b/Platform/Intel/MinPlatformPkg/Test/Library/TestPointCheckLib/DxeTes= tPointCheckLib.inf @@ -32,6 +32,7 @@ [LibraryClasses] TestPointLib PciSegmentLib PciSegmentInfoLib + SafeIntLib =20 [Packages] MinPlatformPkg/MinPlatformPkg.dec --=20 2.28.0.windows.1