From: "Jonathan Watt" <jwatt@jwatt.org>
To: Tim Lewis <tim.lewis@insyde.com>,
Jim.Dailey@dell.com, devel@edk2.groups.io
Cc: dandan.bi@intel.com, jaben.carsey@intel.com,
zhichao.gao@intel.com, ray.ni@intel.com
Subject: Re: [edk2-devel] [PATCH v1 1/1] ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option
Date: Tue, 7 May 2019 22:04:36 +0100 [thread overview]
Message-ID: <be9c151a-83fb-1739-54d9-4ef9da476bd2@jwatt.org> (raw)
In-Reply-To: <000301d50516$473ac170$d5b04450$@insyde.com>
Ah, hopefully that simplifies the decision. At any rate, thank you for checking
and clarifying.
For those working on the spec, in addition to clarifying -opt to avoid this
confusion, one further thing to do would be to clarify the format of the "in
hexadecimal" option. It would be good if it could state which of leading "0x",
just leading zeros, and no prefix at all, are valid. The edk2 implementation
only appeared to support leading "0x" and no prefix at all based on my previous
testing, but I saw (what appeared to nowadays be incorrect) comments in the code
stating that leading zeros were also valid.
Jonathan
On 07/05/2019 21:48, Tim Lewis wrote:
> Jim --
>
> Well, speaking of shooting-oneself-in-the-foot, it turns out that our non-EDK2 implementation followed the recommendation in the patch.
>
> I agree that the spec is ambiguous and, it turns out that our largest use case already uses the recommended behavior.
>
> Sorry to one and all.
>
> Tim
>
> -----Original Message-----
> From: Jim.Dailey@dell.com <Jim.Dailey@dell.com>
> Sent: Tuesday, May 7, 2019 1:30 PM
> To: devel@edk2.groups.io; tim.lewis@insyde.com
> Cc: dandan.bi@intel.com; jwatt@jwatt.org; jaben.carsey@intel.com; zhichao.gao@intel.com; ray.ni@intel.com
> Subject: RE: [edk2-devel] [PATCH v1 1/1] ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option
>
> Tim,
>
> Out of curiosity, what does the specification you refer to that was used to write the non-EDK2 implementations say about the -opt switch?
>
> Regards,
> Jim
>
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Tim Lewis
> Sent: Tuesday, May 7, 2019 3:04 PM
> To: 'Jonathan Watt'; 'Carsey, Jaben'; devel@edk2.groups.io; 'Gao, Zhichao'; 'Ni, Ray'
> Cc: 'Bi, Dandan'
> Subject: Re: [edk2-devel] [PATCH v1 1/1] ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option
>
> Jonathan --
>
> The bcfg command pre-dates the UEFI shell specification. I know of at least two non-EDK2 implementations, including one maintained by my company, that are implemented to the specification. Server platforms that use the "application" style boot options can regularly run over 10 options.
>
> I believe the better alternative is to add a new option in the specification and leave the existing syntax for -opt.
>
> Thanks,
>
> Tim
>
> -----Original Message-----
> From: Jonathan Watt <jwatt@jwatt.org>
> Sent: Tuesday, May 7, 2019 12:06 PM
> To: Carsey, Jaben <jaben.carsey@intel.com>; devel@edk2.groups.io; tim.lewis@insyde.com; Gao, Zhichao <zhichao.gao@intel.com>; Ni, Ray <ray.ni@intel.com>
> Cc: Bi, Dandan <dandan.bi@intel.com>
> Subject: Re: [edk2-devel] [PATCH v1 1/1] ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option
>
> I should add, for me personally, once I noticed the inconsistency I changed my scripts to use the "0x" prefix to avoid this real footgun. I imagine that anyone else that may have encountered this would have done the same and so, like me, wouldn't be affected by the change if it were to happen.
>
> On 07/05/2019 20:00, Jonathan Watt wrote:
>> There is potential for that, but it's not certain. For it to happen
>> scripts would need to be both omitting the "0x" prefix and be pass an
>> option number greater than 9. The fact this very unexpected
>> inconsistency (which will corrupt the wrong option when those same two
>> things are true!) hasn't been reported before would seem to indicate
>> this combination doesn't really happen/is rare in practice.
>>
>> Also, is TianoCore's bcfg the only implementation people are using? If
>> there are other implementations, would this bring TianoCore's
>> implementation into or out of line with them? That may impact whether the spec could/should change.
>>
>> On 07/05/2019 18:40, Carsey, Jaben wrote:
>>> It will break existing scripts. Do you have such scripts in your environment dependent on this parameter?
>>>
>>>> -----Original Message-----
>>>> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf
>>>> Of Tim Lewis
>>>> Sent: Tuesday, May 07, 2019 9:20 AM
>>>> To: devel@edk2.groups.io; Carsey, Jaben <jaben.carsey@intel.com>;
>>>> Gao, Zhichao <zhichao.gao@intel.com>; Ni, Ray <ray.ni@intel.com>;
>>>> jwatt@jwatt.org
>>>> Cc: Bi, Dandan <dandan.bi@intel.com>
>>>> Subject: Re: [edk2-devel] [PATCH v1 1/1]
>>>> ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option
>>>> Importance: High
>>>>
>>>> The question is whether this will break compatibility with existing
>>>> shell scripts. In order to maintain that compatibility, it may be
>>>> necessary to add a new option rather than trying to update an existing one.
>>>>
>>>> Tim
>>>>
>>>> -----Original Message-----
>>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
>>>> Carsey, Jaben
>>>> Sent: Tuesday, May 7, 2019 7:36 AM
>>>> To: Gao, Zhichao <zhichao.gao@intel.com>; devel@edk2.groups.io; Ni,
>>>> Ray <ray.ni@intel.com>; jwatt@jwatt.org
>>>> Cc: Bi, Dandan <dandan.bi@intel.com>
>>>> Subject: Re: [edk2-devel] [PATCH v1 1/1]
>>>> ShellPkg/UefiShellBcfgCommandLib:
>>>> Fix '-opt' option
>>>>
>>>> Zhichao,
>>>> I can help submit errata for shell spec if needed.
>>>>
>>>> Per patch,
>>>> I agree. This looks good.
>>>> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: Gao, Zhichao
>>>>> Sent: Tuesday, May 07, 2019 2:52 AM
>>>>> To: devel@edk2.groups.io; Ni, Ray <ray.ni@intel.com>;
>>>>> jwatt@jwatt.org
>>>>> Cc: Carsey, Jaben <jaben.carsey@intel.com>; Bi, Dandan
>>>>> <dandan.bi@intel.com>
>>>>> Subject: RE: [edk2-devel] [PATCH v1 1/1]
>>>>> ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option
>>>>> Importance: High
>>>>>
>>>>> This patch looks good for me.
>>>>> Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
>>>>>
>>>>> But when I view the command in UEFI SHELL 2.2 spec:
>>>>> ...
>>>>> bcfg driver|boot [-opt # [[filename]|["data"]] | [KeyData <ScanCode
>>>>> UnicodeChar>*]]
>>>>> ...
>>>>> -opt
>>>>> Modify the optional data associated with a driver or boot option.
>>>>> Followed either by the filename of the file which contains the
>>>>> binary data to be associated with the driver or boot option
>>>>> optional data, or else the quote- delimited data that will be
>>>>> associated with the driver or boot option optional data.
>>>>> ...
>>>>>
>>>>> This description lack the comment of '#' parameter and that may
>>>>> make the consumer confused. Usually consumers would regard it as
>>>>> the same in other option, such as ' bcfg driver|boot [rm #]'. The
>>>>> '#' is clearly descripted as a hexadecimal parameter:
>>>>> rm
>>>>> Remove an option. The # parameter lists the option number to remove
>>>>> in hexadecimal.
>>>>>
>>>>> So I think we should update the shell spec by the way.
>>>>>
>>>>> Thanks,
>>>>> Zhichao
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf
>>>>>> Of
>>>>> Ni,
>>>>>> Ray
>>>>>> Sent: Monday, May 6, 2019 10:02 PM
>>>>>> To: jwatt@jwatt.org; devel@edk2.groups.io
>>>>>> Cc: Carsey, Jaben <jaben.carsey@intel.com>; Bi, Dandan
>>>>>> <dandan.bi@intel.com>
>>>>>> Subject: Re: [edk2-devel] [PATCH v1 1/1]
>>>>> ShellPkg/UefiShellBcfgCommandLib:
>>>>>> Fix '-opt' option
>>>>>>
>>>>>> Dandan,
>>>>>> Can you please help to review?
>>>>>>
>>>>>> Thanks,
>>>>>> Ray
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: jwatt@jwatt.org [mailto:jwatt@jwatt.org]
>>>>>>> Sent: Monday, May 6, 2019 9:03 PM
>>>>>>> To: devel@edk2.groups.io
>>>>>>> Cc: Carsey, Jaben <jaben.carsey@intel.com>; Ni, Ray
>>>>>>> <ray.ni@intel.com>
>>>>>>> Subject: [PATCH v1 1/1] ShellPkg/UefiShellBcfgCommandLib: Fix '-opt'
>>>>>>> option
>>>>>>>
>>>>>>> From: Jonathan Watt <jwatt@jwatt.org>
>>>>>>>
>>>>>>> For all other bcfg commands the "#" (option number) argument(s)
>>>>>>> are treated as hexedecimal values regardless of whether or not
>>>>>>> they are prefixed by "0x". This change fixes '-opt' to handle its "#"
>>>>>>> (option number) argument consistently with the other commands.
>>>>>>>
>>>>>>> Making this change removes a potential footgun whereby a user
>>>>>>> that has been using a number without a "0x" prefix with other
>>>>>>> bcfg commands finds that, on using that exact same number with
>>>>>>> '-opt', it has this time unexpectedly been interpreted as a
>>>>>>> decimal number and they have modified
>>>>>>> (corrupted) an unrelated load option. For example, a user may
>>>>>>> have been specifying "10" to other commands to have them act on
>>>>>>> the 16th option (because simply "10", without any prefix, is how
>>>>>>> 'bcfg boot dump' displayed the option number for the 16th option).
>>>>>>> Unfortunately for them, if they also use '-opt' with "10" it
>>>>>>> would unexpectedly and inconsistently act on the 10th option.
>>>>>>>
>>>>>>> CC: Jaben Carsey <jaben.carsey@intel.com>
>>>>>>> CC: Ray Ni <ray.ni@intel.com>
>>>>>>> Signed-off-by: Jonathan Watt <jwatt@jwatt.org>
>>>>>>> ---
>>>>>>>
>>>>>>>
>>>> ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c
>>>>> |
>>>>>>> 2
>>>>>>> +-
>>>>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>>>
>>>>>>> diff --git
>>>>>>>
>>>>> a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.
>>>>> c
>>>>>>>
>>>>> b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.
>>>>> c
>>>>>>> index d033c7c1dc59..e8b48b4990dd 100644
>>>>>>> ---
>>>>>>>
>>>>> a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.
>>>>> c
>>>>>>> +++
>>>>>>>
>>>>> b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.
>>>>> c
>>>>>>> @@ -1019,7 +1019,7 @@ BcfgAddOpt(
>>>>>>> //
>>>>>>> // Get the index of the variable we are changing.
>>>>>>> //
>>>>>>> - Status = ShellConvertStringToUint64(Walker, &Intermediate,
>>>>>>> FALSE, TRUE);
>>>>>>> + Status = ShellConvertStringToUint64(Walker, &Intermediate,
>>>>>>> + TRUE, TRUE);
>>>>>>> if (EFI_ERROR(Status) || (((UINT16)Intermediate) !=
>>>>>>> Intermediate)
>>>>>>> || StrStr(Walker, L" ") == NULL || ((UINT16)Intermediate) >
>>>>>>> ((UINT16)OrderCount)) {
>>>>>>> ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN
>>>>>>> (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", L"Option
>>>> Index");
>>>>>>> ShellStatus = SHELL_INVALID_PARAMETER;
>>>>>>> --
>>>>>>> 2.21.0
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>
>
>
>
>
>
>
next prev parent reply other threads:[~2019-05-07 21:04 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-06 13:02 [PATCH v1 0/1] ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option number handling Jonathan Watt
2019-05-06 13:02 ` [PATCH v1 1/1] ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option Jonathan Watt
2019-05-06 14:02 ` Ni, Ray
2019-05-07 9:51 ` [edk2-devel] " Gao, Zhichao
2019-05-07 14:35 ` Carsey, Jaben
2019-05-07 15:05 ` Dandan Bi
2019-05-07 16:20 ` Tim Lewis
2019-05-07 17:40 ` Carsey, Jaben
2019-05-07 17:43 ` Tim Lewis
2019-05-07 19:00 ` Jonathan Watt
2019-05-07 19:06 ` Jonathan Watt
2019-05-07 20:04 ` Tim Lewis
2019-05-07 20:30 ` Jim.Dailey
2019-05-07 20:48 ` Tim Lewis
2019-05-07 20:52 ` Jim.Dailey
2019-05-07 21:04 ` Jonathan Watt [this message]
2019-05-07 20:51 ` Jonathan Watt
2019-05-07 21:02 ` Tim Lewis
2019-05-07 21:07 ` Jonathan Watt
2019-05-07 23:59 ` Carsey, Jaben
2019-05-08 0:08 ` Tim Lewis
2019-06-11 21:53 ` Jonathan Watt
[not found] ` <15A74385D3E8CBEB.24554@groups.io>
2019-08-02 20:28 ` Jonathan Watt
2019-08-02 21:23 ` Carsey, Jaben
2019-08-05 0:51 ` Gao, Zhichao
2019-08-12 16:31 ` Jonathan Watt
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=be9c151a-83fb-1739-54d9-4ef9da476bd2@jwatt.org \
--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