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 4FA461A1E29 for ; Wed, 26 Oct 2016 03:32:30 -0700 (PDT) Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (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 E36DD332F72; Wed, 26 Oct 2016 10:32:29 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-27.phx2.redhat.com [10.3.116.27]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u9QAWSRB032457; Wed, 26 Oct 2016 06:32:28 -0400 To: Ard Biesheuvel , edk2-devel@ml01.01.org, leif.lindholm@linaro.org References: <1477419424-22235-1-git-send-email-ard.biesheuvel@linaro.org> <1477419424-22235-2-git-send-email-ard.biesheuvel@linaro.org> From: Laszlo Ersek Message-ID: <38b82d4d-3d07-a05a-6395-7e769f87e972@redhat.com> Date: Wed, 26 Oct 2016 12:32:27 +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: <1477419424-22235-2-git-send-email-ard.biesheuvel@linaro.org> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 26 Oct 2016 10:32:29 +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 10:32:30 -0000 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit 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... 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. > @@ -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 Laszlo