From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (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 F38A51A1E34 for ; Wed, 26 Oct 2016 04:28:58 -0700 (PDT) Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 96DF080F9A; Wed, 26 Oct 2016 11:28:58 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-27.phx2.redhat.com [10.3.116.27]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u9QBSuFv004121; Wed, 26 Oct 2016 07:28:57 -0400 To: Ard Biesheuvel References: <1477419424-22235-1-git-send-email-ard.biesheuvel@linaro.org> <1477419424-22235-2-git-send-email-ard.biesheuvel@linaro.org> <38b82d4d-3d07-a05a-6395-7e769f87e972@redhat.com> Cc: "edk2-devel@lists.01.org" , Leif Lindholm From: Laszlo Ersek Message-ID: <5959d835-b0b8-3def-b4dd-ee0df52db682@redhat.com> Date: Wed, 26 Oct 2016 13:28:56 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 26 Oct 2016 11:28:58 +0000 (UTC) Subject: Re: [PATCH 1/2] ArmPlatformPkg/ArmVExpressFastBootDxe: eliminate deprecated string functions 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, 26 Oct 2016 11:28:59 -0000 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 10/26/16 12:34, Ard Biesheuvel wrote: > On 26 October 2016 at 11:32, Laszlo Ersek wrote: >> On 10/25/16 20:17, Ard Biesheuvel wrote: >>> Get rid of functions that are no longer available when defining >>> DISABLE_NEW_DEPRECATED_INTERFACES >>> >>> Contributed-under: TianoCore Contribution Agreement 1.0 >>> Signed-off-by: Ard Biesheuvel >>> --- >>> ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c | 8 ++++---- >>> 1 file changed, 4 insertions(+), 4 deletions(-) >>> >>> diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c >>> index 4d0811cc5eaf..6b39682948aa 100644 >>> --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c >>> +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressFastBootDxe/ArmVExpressFastBoot.c >>> @@ -269,7 +269,7 @@ ArmFastbootPlatformInit ( >>> >>> // Copy handle and partition name >>> Entry->PartitionHandle = AllHandles[LoopIndex]; >>> - StrnCpy ( >>> + CopyMem ( >>> Entry->PartitionName, >>> PartitionEntries[PartitionNode->PartitionNumber - 1].PartitionName, // Partition numbers start from 1. >>> PARTITION_NAME_MAX_LENGTH >> >> okay >> >>> @@ -320,7 +320,7 @@ ArmFastbootPlatformFlashPartition ( >>> CHAR16 PartitionNameUnicode[60]; >>> BOOLEAN PartitionFound; >>> >>> - AsciiStrToUnicodeStr (PartitionName, PartitionNameUnicode); >>> + AsciiStrToUnicodeStrS (PartitionName, PartitionNameUnicode, 60); >>> >>> PartitionFound = FALSE; >>> Entry = (FASTBOOT_PARTITION_LIST *) GetFirstNode (&(mPartitionListHead)); >> >> You asked me to introduce a macro for a very similar case in one of my >> ArmPkg patches... >> > > You are right, my apologies. In my defense, ArmPkg is something we > consider maintained, whereas ArmPlatformPkg is a collection of cruft > which we would like to phase out as soon as we can. Ah, okay; I didn't realize that. No need to change this hunk then (I didn't request that anyway). It is correct after all (and beauty we don't insist upon here, then). Thanks Laszlo > >> Anyway, the change is valid. >> >>> @@ -396,7 +396,7 @@ ArmFastbootPlatformGetVar ( >>> ) >>> { >>> if (AsciiStrCmp (Name, "product")) { >>> - AsciiStrCpy (Value, FixedPcdGetPtr (PcdFirmwareVendor)); >>> + AsciiStrCpyS (Value, 60, FixedPcdGetPtr (PcdFirmwareVendor)); >>> } else { >>> *Value = '\0'; >>> } >> >> This is wrong. >> >> The signature of this function does not indicate the expected size of >> the receiving buffer. However, the function is a >> FASTBOOT_PLATFORM_GETVAR implementation (== >> FASTBOOT_PLATFORM_PROTOCOL.GetVar() member implementation). The leading >> comment on that function pointer type says, >> >> Variable names and values may not be larger than 60 bytes, excluding the >> terminal null character. This is a limitation of the Fastboot protocol. >> >> I.e., 60 non-NUL bytes, plus the terminating NUL, is a valid variable >> value. Therefore the DestMax parameter should be 61. >> >> Just to be sure, I checked the call sites. There is only one call site >> actually, in >> "EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c", function >> HandleGetVar(): >> >> CHAR8 Response[FASTBOOT_COMMAND_MAX_LENGTH + 1] = "OKAY"; >> ... >> Status = mPlatform->GetVar (CmdArg, Response + 4); >> >> FASTBOOT_COMMAND_MAX_LENGTH is 64 (same file), therefore (Response + 4) >> points to a (sub-)array of 61 characters. IOW, the call site is >> consistent with the protocol definition, and the DestMax param should be >> bumped to 61. >> > > Thanks for spotting that. > >>> @@ -410,7 +410,7 @@ ArmFastbootPlatformOemCommand ( >>> { >>> CHAR16 CommandUnicode[65]; >>> >>> - AsciiStrToUnicodeStr (Command, CommandUnicode); >>> + AsciiStrToUnicodeStrS (Command, CommandUnicode, 65); >>> >>> if (AsciiStrCmp (Command, "Demonstrate") == 0) { >>> DEBUG ((EFI_D_ERROR, "ARM OEM Fastboot command 'Demonstrate' received.\n")); >>> >> >> This is correct. >> > > Thanks, > Ard. >