From: Laszlo Ersek <lersek@redhat.com>
To: "Gabriel L. Somlo" <somlo@cmu.edu>
Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, jordan.l.justen@intel.com
Subject: Re: [Qemu-devel] [PATCH] fw_cfg: insert string blobs via qemu cmdline
Date: Tue, 29 Sep 2015 09:16:05 +0200 [thread overview]
Message-ID: <560A3AB5.3060206@redhat.com> (raw)
In-Reply-To: <20150928224716.GB21154@GLSMBP.INI.CMU.EDU>
On 09/29/15 00:47, Gabriel L. Somlo wrote:
> On Tue, Sep 29, 2015 at 12:08:14AM +0200, Laszlo Ersek wrote:
>> On 09/28/15 23:45, Gabriel L. Somlo wrote:
>>> On Mon, Sep 28, 2015 at 11:05:32PM +0200, Laszlo Ersek wrote:
>>>> On 09/28/15 22:56, Laszlo Ersek wrote:
>>>>> On 09/28/15 22:00, Eric Blake wrote:
>>>>>> On 09/28/2015 01:51 PM, Gabriel L. Somlo wrote:
>>>>>>> On Mon, Sep 28, 2015 at 01:46:33PM -0600, Eric Blake wrote:
>>>>>>>> On 09/28/2015 07:30 AM, Laszlo Ersek wrote:
>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> +Small enough items may be provided directly as strings on the command
>>>>>>>>>> +line, using the syntax:
>>>>>>>>>> +
>>>>>>>>>> + -fw_cfg [name=]<item_name>,content=<string>
>>>>>>>>>> +
>>>>>>>>>
>>>>>>>>> Please consider spelling out that these blobs will NOT be NUL-terminated
>>>>>>>>> when viewed on the guest. (It kinda follows from all the other fw_cfg
>>>>>>>>> things, but once we leave host-side files for qemu command line strings,
>>>>>>>>> it might become non-obvious to users.)
>>>>>>>>
>>>>>>>> Or else GUARANTEE that it will be NUL-terminated (and the only way to
>>>>>>>> get blobs that are not NUL terminated is to use files rather than content=).
>>>>>>>
>>>>>>> I went with the first suggestion (leave out the trailing '\0' from the
>>>>>>> blob payload, and say so in docs/specs/fw_cfg.txt) in v2 of the patch.
>>>>>>>
>>>>>>> Do you feel strongly about including the \0 ? Otherwise, we're already
>>>>>>> there :)
>>>>>>
>>>>>> I don't know what users are more likely to want to push through. A
>>>>>> trailing NUL implies a binary file (as text files cannot contain \0),
>>>>>> but even without a trailing NUL, a file is not a text file (per the
>>>>>> POSIX definition) unless it is either empty or ends in a newline. Use
>>>>>> of content=... is unlikely to have users remembering to place a newline
>>>>>> there if examples don't suggest it. And I don't know if guests are
>>>>>> expecting text data from these blobs, or are okay with binary blobs.
>>>>>
>>>>> fw_cfg blobs are considered binary, unless a specific selector key or
>>>>> fw_cfg file name makes different arrangements. (Described in QEMU docs,
>>>>> or elsewhere.) See more below.
>>>>>
>>>>>> That's a long-winded way of stating that omitting the NUL is fine by me,
>>>>>> as long as you document it, and as long as you are catering to the most
>>>>>> common user usage of the feature.
>>>>>
>>>>> The main consumer of the -fw_cfg switch is guest firmware (and, perhaps
>>>>> soon, the guest kernel too); the idea is to pass down firmware config
>>>>> items without QEMU being aware of their actual meaning. Therefore I'd
>>>>> like to see as little smarts as possible in QEMU wrt. the content passed
>>>>> down with -fw_cfg.
>>>>>
>>>>>>
>>>>>> Either that, or it's my way of dreaming about alternative 3: guarantee a
>>>>>> trailing newline (rather than NUL), so that 'content="abc"' on the
>>>>>> command line results in the 4-byte blob "abc\n" in the guest.
>>>>>>
>>>>>
>>>>> Please don't :)
>>>>>
>>>>> The current client code in OVMF (in effect for two specific fw_cfg file
>>>>> names) recognizes the following content pattern:
>>>>>
>>>>> [0nN1yY](\n|\r\n)?
>>>>>
>>>>> E.g., QEMU may pass in a simple host-side file as an fw_cfg entry on a
>>>>> Windows host too. If you edited that file with "notepad.exe", it'll have
>>>>> \r\n, or maybe no line terminator at all. Other (really binary) blobs
>>>>> (passed in with file=...) may have embedded \0 characters.
>>>>>
>>>>> I think such flexibility is best left to the firmware, or else should be
>>>>> restricted in specifications living outside of QEMU, and QEMU should be
>>>>> dumb and transparent here, in accordance with the original goal of this
>>>>> feature.
>>>>>
>>>>> Re: policy vs. mechanism, the opt/ prefix is also strongly recommended
>>>>> (for the names), but we don't enforce it.
>>>>
>>>> ... This made me think of the following language that Gabriel added in
>>>> v2 (at my request, and to my acceptance):
>>>>
>>>>> Both <item_name> and, if applicable, the content <string> are assumed
>>>>> to consist exclusively of plain ASCII characters.
>>>>
>>>> Now I think that this could be improved. I think we should say "should
>>>> consist" rather than "are assumed to consist", because neither the QEMU
>>>> nor the firmware(s) "assume" anything in general here -- that would be
>>>> policy --, we just want to help the user avoid shooting himself in the
>>>> foot (and reporting a bug), lest he pass non-ASCII UTF-8 on the command
>>>> line, and the firmware do surprising things.
>>>>
>>>> Maybe I should even retract my request for spelling out ASCII... That's
>>>> really not a requirement, just a high-level recommendation for humans
>>>> who develop guest code for this interface, to save their sanity.
>>>
>>> Maybe something like this, then:
>>>
>>> Both <item_name> and, if applicable, the content <string> will be
>>> passed through by QEMU without any interpretation, expansion, or
>>> further processing. Any such processing (potentially performed by
>>> e.g., the shell) is outside QEMU's responsibility; as such, using
>>> plain ASCII characters is recommended.
>>>
>>> Let me know what you think.
>>
>> Sounds good to me. Thanks for your patience. :)
>
> Cool, v3 coming right up. Not 100% sure about etiquette, but I'm
> inclined to assume your earlier Reviewed-by is still valid :)
Sure.
> Thanks,
> --Gabriel
>
> PS. You have a *very* *large* reserve of patience credits with me, so
> no worries on that :)
>
Heh, thanks. :)
Laszlo
prev parent reply other threads:[~2015-09-29 7:16 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-26 22:55 [Qemu-devel] [PATCH] fw_cfg: insert string blobs via qemu cmdline Gabriel L. Somlo
2015-09-28 13:30 ` Laszlo Ersek
2015-09-28 15:05 ` Gabriel L. Somlo
2015-09-28 19:46 ` Eric Blake
2015-09-28 19:51 ` Gabriel L. Somlo
2015-09-28 20:00 ` Eric Blake
2015-09-28 20:56 ` Laszlo Ersek
2015-09-28 21:05 ` Laszlo Ersek
2015-09-28 21:45 ` Gabriel L. Somlo
2015-09-28 22:08 ` Laszlo Ersek
2015-09-28 22:47 ` Gabriel L. Somlo
2015-09-29 7:16 ` Laszlo Ersek [this message]
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-all 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=560A3AB5.3060206@redhat.com \
--to=lersek@redhat.com \
--cc=jordan.l.justen@intel.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=somlo@cmu.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.