From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: redhat.com, ip: 209.132.183.28, mailfrom: lersek@redhat.com) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by groups.io with SMTP; Thu, 18 Apr 2019 10:47:27 -0700 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 77C4E307DAC8; Thu, 18 Apr 2019 17:47:27 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-179.rdu2.redhat.com [10.10.120.179]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3CDEF600C1; Thu, 18 Apr 2019 17:47:26 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Bob Feng , Liming Gao , Yonghong Zhu Subject: [PATCH v2 3/5] BaseTools/PiFirmwareFile: fix undefined behavior in SECTION_SIZE Date: Thu, 18 Apr 2019 19:47:08 +0200 Message-Id: <20190418174710.12236-4-lersek@redhat.com> In-Reply-To: <20190418174710.12236-1-lersek@redhat.com> References: <20190418174710.12236-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Thu, 18 Apr 2019 17:47:27 +0000 (UTC) Content-Transfer-Encoding: quoted-printable Sync SECTION_SIZE() from MdePkg to BaseTools, from an earlier patch in this series. Cc: Bob Feng Cc: Liming Gao Cc: Yonghong Zhu Bugzilla: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1710 Signed-off-by: Laszlo Ersek --- Notes: v2: =20 - sync with the v2 MdePkg/PiFirmwareFile SECTION_SIZE patch BaseTools/Source/C/Include/Common/PiFirmwareFile.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/BaseTools/Source/C/Include/Common/PiFirmwareFile.h b/BaseToo= ls/Source/C/Include/Common/PiFirmwareFile.h index 5bc871df4855..7d8acb669b69 100644 --- a/BaseTools/Source/C/Include/Common/PiFirmwareFile.h +++ b/BaseTools/Source/C/Include/Common/PiFirmwareFile.h @@ -300,8 +300,15 @@ typedef struct { CHAR16 VersionString[1]; } EFI_VERSION_SECTION2; =20 -#define SECTION_SIZE(SectionHeaderPtr) \ - ((UINT32) (*((UINT32 *) ((EFI_COMMON_SECTION_HEADER *) SectionHeader= Ptr)->Size) & 0x00ffffff)) +// +// The argument passed as the SectionHeaderPtr parameter to the SECTION_= SIZE() +// function-like macro below must not have side effects: SectionHeaderPt= r is +// evaluated multiple times. +// +#define SECTION_SIZE(SectionHeaderPtr) ((UINT32) ( \ + (((EFI_COMMON_SECTION_HEADER *) (SectionHeaderPtr))->Size[0] ) = | \ + (((EFI_COMMON_SECTION_HEADER *) (SectionHeaderPtr))->Size[1] << 8) = | \ + (((EFI_COMMON_SECTION_HEADER *) (SectionHeaderPtr))->Size[2] << 16))= ) =20 #pragma pack() =20 --=20 2.19.1.3.g30247aa5d201