From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 D217781B3E for ; Tue, 10 Jan 2017 17:36:09 -0800 (PST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP; 10 Jan 2017 17:36:09 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,345,1477983600"; d="scan'208";a="47640773" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga004.jf.intel.com with ESMTP; 10 Jan 2017 17:36:09 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 10 Jan 2017 17:36:09 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.88]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.177]) with mapi id 14.03.0248.002; Wed, 11 Jan 2017 09:36:08 +0800 From: "Zeng, Star" To: Chris Phillips , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" , "Zeng, Star" Thread-Topic: [edk2] [PATCH v2] Nt32Pkg: Fix code to correctly set SMBIOS Type 2 Length Thread-Index: AQHSa2Fx6Tn3PGAdvEasZCkkqXF2OaEyf03g Date: Wed, 11 Jan 2017 01:36:07 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103B815A02@shsmsx102.ccr.corp.intel.com> References: <2f986db7-7f13-43e4-b76d-fe9dcead5edc@AIA2PHNNRN.local> In-Reply-To: <2f986db7-7f13-43e4-b76d-fe9dcead5edc@AIA2PHNNRN.local> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2] Nt32Pkg: Fix code to correctly set SMBIOS Type 2 Length X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Jan 2017 01:36:09 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Star Zeng -----Original Message----- From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Chri= s Phillips Sent: Wednesday, January 11, 2017 12:49 AM To: edk2-devel@lists.01.org Cc: Ni, Ruiyu Subject: [edk2] [PATCH v2] Nt32Pkg: Fix code to correctly set SMBIOS Type 2= Length When running Nt32Pkg, SMBIOS Type 2 had the wrong Length. Fixed the code to use the correct structure in sizeof, and properly account= for ContainedObjectHandles. Also updated variable names with Assert -> Asset Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chris Phillips --- .../MiscBaseBoardManufacturerFunction.c | 32 +++++++++++++-----= ---- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunct= ion.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c index 303726c3fd..765627a8e6 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction. +++ c @@ -3,6 +3,7 @@ SMBIOS type 2. =20 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.
+(C) Copyright 2017 Hewlett Packard Enterprise Development LP
This program and the accompanying materials are licensed and made availab= le under the terms and conditions of the BSD License which accompanies thi= s distribution. The full text of the license may be found at @@ -31,7 +32,= 7 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer) UINTN ManuStrLen; UINTN ProductStrLen; UINTN VerStrLen; - UINTN AssertTagStrLen; + UINTN AssetTagStrLen; UINTN SerialNumStrLen; UINTN ChassisStrLen; EFI_STATUS Status; @@ -39,7 +40,7 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer) EFI_STRING Product; EFI_STRING Version; EFI_STRING SerialNumber; - EFI_STRING AssertTag; + EFI_STRING AssetTag; EFI_STRING Chassis; STRING_REF TokenToGet; EFI_SMBIOS_HANDLE SmbiosHandle; @@ -84,9 +85,9 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer) } =20 TokenToGet =3D STRING_TOKEN (STR_MISC_BASE_BOARD_ASSET_TAG); - AssertTag =3D HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL); - AssertTagStrLen =3D StrLen(AssertTag); - if (AssertTagStrLen > SMBIOS_STRING_MAX_LENGTH) { + AssetTag =3D HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL); = =20 + AssetTagStrLen =3D StrLen(AssetTag); if (AssetTagStrLen >=20 + SMBIOS_STRING_MAX_LENGTH) { return EFI_UNSUPPORTED; } =20 @@ -101,11 +102,16 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer) // // Two zeros following the last string. // - SmbiosRecord =3D AllocatePool(sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen += 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStr= Len + 1 + ChassisStrLen +1 + 1); - ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE3) + ManuStrLen + 1 + Pro= ductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1 = + ChassisStrLen +1 + 1); + // Since we fill NumberOfContainedObjectHandles =3D 0, remove sizeof=20 + (UINT16) bytes for ContainedObjectHandles[1] // SmbiosRecord =3D=20 + AllocatePool(sizeof (SMBIOS_TABLE_TYPE2) - sizeof (UINT16) +=20 + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen +=20 + 1 + AssetTagStrLen + 1 + ChassisStrLen + 1 + 1); =20 + ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE2) - sizeof (UINT16) +=20 + ManuStrLen + 1 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen +=20 + 1 + AssetTagStrLen + 1 + ChassisStrLen + 1 + 1); =20 SmbiosRecord->Hdr.Type =3D EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION; - SmbiosRecord->Hdr.Length =3D sizeof (SMBIOS_TABLE_TYPE2); + // + // Since we fill NumberOfContainedObjectHandles =3D 0, remove sizeof=20 + (UINT16) bytes for ContainedObjectHandles[1] // =20 + SmbiosRecord->Hdr.Length =3D sizeof (SMBIOS_TABLE_TYPE2) - sizeof=20 + (UINT16); // // Make handle chosen by smbios protocol.add automatically. // @@ -127,7 +133,7 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer) // SmbiosRecord->SerialNumber =3D 4; =20 // - // AssertTag will be the 5th optional string following the formatted str= ucture. + // AssetTag will be the 5th optional string following the formatted stru= cture. // SmbiosRecord->AssetTag =3D 5; =20 =20 @@ -142,15 +148,15 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer) =20 OptionalStrStart =3D (CHAR8 *)(SmbiosRecord + 1); // - // Since we fill NumberOfContainedObjectHandles =3D 0 for simple, just a= fter this filed to fill string + // Since we fill NumberOfContainedObjectHandles =3D 0, just after this=20 + field to fill string // - OptionalStrStart -=3D 2; + OptionalStrStart -=3D sizeof (UINT16); UnicodeStrToAsciiStr(Manufacturer, OptionalStrStart); UnicodeStrToAsciiStr(Product, OptionalStrStart + ManuStrLen + 1); UnicodeStrToAsciiStr(Version, OptionalStrStart + ManuStrLen + 1 + Produc= tStrLen + 1); UnicodeStrToAsciiStr(SerialNumber, OptionalStrStart + ManuStrLen + 1 + P= roductStrLen + 1 + VerStrLen + 1); - UnicodeStrToAsciiStr(AssertTag, OptionalStrStart + ManuStrLen + 1 + Prod= uctStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1); - UnicodeStrToAsciiStr(Chassis, OptionalStrStart + ManuStrLen + 1 + Produc= tStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 + AssertTagStrLen + 1); + UnicodeStrToAsciiStr(AssetTag, OptionalStrStart + ManuStrLen + 1 +=20 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1); =20 + UnicodeStrToAsciiStr(Chassis, OptionalStrStart + ManuStrLen + 1 +=20 + ProductStrLen + 1 + VerStrLen + 1 + SerialNumStrLen + 1 +=20 + AssetTagStrLen + 1); // // Now we have got the full smbios record, call smbios protocol to add t= his record. // -- 2.11.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel