From: Laszlo Ersek <lersek@redhat.com>
To: Leif Lindholm <leif.lindholm@linaro.org>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: edk2-devel-01 <edk2-devel@ml01.01.org>,
Ryan Harkin <ryan.harkin@linaro.org>
Subject: Re: [PATCH v2 5/9] EmbeddedPkg/AndroidFastboot: eliminate deprecated string function calls
Date: Fri, 28 Oct 2016 16:05:56 +0200 [thread overview]
Message-ID: <021d7ae5-d846-3aad-d3ad-a5c39f2e2b21@redhat.com> (raw)
In-Reply-To: <20161028135214.GN1161@bivouac.eciton.net>
On 10/28/16 15:52, Leif Lindholm wrote:
> On Fri, Oct 28, 2016 at 02:40:59PM +0100, Ard Biesheuvel wrote:
>> On 28 October 2016 at 14:36, Leif Lindholm <leif.lindholm@linaro.org> wrote:
>>> On Fri, Oct 28, 2016 at 11:44:34AM +0100, Ard Biesheuvel wrote:
>>>> Get rid of calls to unsafe string functions. These are deprecated and may
>>>> be removed in the future.
>>>>
>>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>>>> ---
>>>> EmbeddedPkg/Application/AndroidFastboot/AndroidBootImg.c | 3 ++-
>>>> EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c | 11 ++++++-----
>>>> 2 files changed, 8 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/EmbeddedPkg/Application/AndroidFastboot/AndroidBootImg.c b/EmbeddedPkg/Application/AndroidFastboot/AndroidBootImg.c
>>>> index bbca90fc08a2..f3e770bcc980 100644
>>>> --- a/EmbeddedPkg/Application/AndroidFastboot/AndroidBootImg.c
>>>> +++ b/EmbeddedPkg/Application/AndroidFastboot/AndroidBootImg.c
>>>> @@ -84,7 +84,8 @@ ParseAndroidBootImg (
>>>> + ALIGN_VALUE (Header->KernelSize, Header->PageSize));
>>>> }
>>>>
>>>> - AsciiStrnCpy (KernelArgs, Header->KernelArgs, BOOTIMG_KERNEL_ARGS_SIZE);
>>>> + AsciiStrnCpyS (KernelArgs, BOOTIMG_KERNEL_ARGS_SIZE, Header->KernelArgs,
>>>> + BOOTIMG_KERNEL_ARGS_SIZE);
>>>>
>>>> return EFI_SUCCESS;
>>>> }
>>>> diff --git a/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c b/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c
>>>> index 9ddc34f57cf4..c5e8a7e34af2 100644
>>>> --- a/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c
>>>> +++ b/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.c
>>>> @@ -99,7 +99,7 @@ HandleDownload (
>>>> IN CHAR8 *NumBytesString
>>>> )
>>>> {
>>>> - CHAR8 Response[12] = "DATA";
>>>> + CHAR8 Response[13];
>>>> CHAR16 OutputString[FASTBOOT_STRING_MAX_LENGTH];
>>>>
>>>> // Argument is 8-character ASCII string hex representation of number of bytes
>>>> @@ -127,8 +127,10 @@ HandleDownload (
>>>> if (mDataBuffer == NULL) {
>>>> SEND_LITERAL ("FAILNot enough memory");
>>>> } else {
>>>> - AsciiStrnCpy (Response + 4, NumBytesString, 8);
>>>> - mTransport->Send (sizeof(Response), Response, &mFatalSendErrorEvent);
>>>> + ZeroMem (Response, sizeof Response);
>>>> + AsciiSPrint (Response, sizeof Response, "DATA%x",
>>>> + (UINT32)mNumDataBytes);
>>>
>>> I'll try to keep the bikeshedding to a minimum, but since
>>> mNumDataBytes is generated from NumBytesString in the first place, why
>>> not do
>>> "DATA%s", NumBytesString
>>> ?
>>>
>>
>> Are you asking me? Or the author of the original code?
>
> Well, the original code used NumBytesString, and your updated version
> does not.
>
> As per Laszlo's comment - the implementation of
> AsciiStrHexToUint64 means that an arbitrarily long string of leading
> zeroes could be handled by this version that would not previously have
> been handled.
>
> If that is desired behaviour, then that makes this change a bugfix
> rather than just an API cleanup. Which should be mentioned in the
> commit message. If you do that:
>
> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Yes, I agree it's an improvement if Ard spells out the "added
robustness" in the commit message. (Should not require a repost.)
In this case, we do have a comment in the function:
// Argument is 8-character ASCII string hex representation of number
// of bytes that will be sent in the data phase.
// Response is "DATA" + that same 8-character string.
Honestly, I didn't trust it fully. I didn't verify where the data comes
from, so the comment could be true. But, in all such cases, as a general
principle, I re-format the string representation from the parsed integer
value. It deals nicely with leading "no-op" characters, such as space
and zeros, and it also drops any trailing garbage even if the input is
*not* overlong.
(For example, if the input is "12zzzz", then AsciiStrHexToUint64() will
return 0x12, and ignore the "zzzz" suffix. I think there's value in not
reproducing such trailing garbage.)
I guess I stick to this principle without much thinking, so I didn't ask
for the commit message to be updated. :)
... Extrapolating a bit, I think you might ask for a commit message
update on patch v2 #8 as well :) Because, in addition to the API
replacement there, the patch fixes a separate, genuine overflow as well
(present in the original code). I think mentioning that fact in passing
in the commit message of v2 #8 should suffice.
Thanks!
Laszlo
>
> /
> Leif
>
>>>> + mTransport->Send (sizeof Response - 1, Response, &mFatalSendErrorEvent);
>>>>
>>>> mState = ExpectDataState;
>>>> mBytesReceivedSoFar = 0;
>>>> @@ -257,8 +259,7 @@ AcceptCmd (
>>>> }
>>>>
>>>> // Commands aren't null-terminated. Let's get a null-terminated version.
>>>> - AsciiStrnCpy (Command, Data, Size);
>>>> - Command[Size] = '\0';
>>>> + AsciiStrnCpyS (Command, sizeof Command, Data, Size);
>>>>
>>>> // Parse command
>>>> if (MATCH_CMD_LITERAL ("getvar", Command)) {
>>>> --
>>>> 2.7.4
>>>>
next prev parent reply other threads:[~2016-10-28 14:05 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-28 10:44 [PATCH v2 0/9] EmbeddedPkg: eliminate calls to deprecated functions Ard Biesheuvel
2016-10-28 10:44 ` [PATCH v2 1/9] EmbeddedPkg/AndroidFastbootTransportTcpDxe: remove broken hostname handling Ard Biesheuvel
2016-10-28 12:40 ` Leif Lindholm
2016-10-28 10:44 ` [PATCH v2 2/9] EmbeddedPkg: remove unused PrePiHobListPointerLib Ard Biesheuvel
2016-10-28 12:40 ` Leif Lindholm
2016-10-28 10:44 ` [PATCH v2 3/9] EmbeddedPkg: add missing modules Ard Biesheuvel
2016-10-28 12:41 ` Leif Lindholm
2016-10-28 10:44 ` [PATCH v2 4/9] EmbeddedPkg/GdbDebugAgent: fix VOID* cast of incorrect size Ard Biesheuvel
2016-10-28 12:47 ` Leif Lindholm
2016-10-28 10:44 ` [PATCH v2 5/9] EmbeddedPkg/AndroidFastboot: eliminate deprecated string function calls Ard Biesheuvel
2016-10-28 13:18 ` Laszlo Ersek
2016-10-28 13:36 ` Leif Lindholm
2016-10-28 13:40 ` Ard Biesheuvel
2016-10-28 13:52 ` Leif Lindholm
2016-10-28 14:04 ` Ard Biesheuvel
2016-10-28 14:05 ` Laszlo Ersek [this message]
2016-10-28 13:41 ` Laszlo Ersek
2016-10-28 10:44 ` [PATCH v2 6/9] EmbeddedPkg/Ebl: " Ard Biesheuvel
2016-10-28 13:31 ` Laszlo Ersek
2016-10-28 14:31 ` Leif Lindholm
2016-10-28 10:44 ` [PATCH v2 7/9] EmbeddedPkg/EfiFileLib: " Ard Biesheuvel
2016-10-28 14:37 ` Leif Lindholm
2016-10-28 10:44 ` [PATCH v2 8/9] EmbeddedPkg/MmcDxe: " Ard Biesheuvel
2016-10-28 13:40 ` Laszlo Ersek
2016-10-28 14:39 ` Leif Lindholm
2016-10-28 10:44 ` [PATCH v2 9/9] EmbeddedPkg: enable -DDISABLE_NEW_DEPRECATED_INTERFACES Ard Biesheuvel
2016-10-28 14:40 ` Leif Lindholm
2016-10-28 15:16 ` [PATCH v2 0/9] EmbeddedPkg: eliminate calls to deprecated functions Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=021d7ae5-d846-3aad-d3ad-a5c39f2e2b21@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox