qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [SeaBIOS] bug: incorrect uuid in seabios output


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [SeaBIOS] bug: incorrect uuid in seabios output
Date: Fri, 27 Nov 2015 14:32:35 -0200
User-agent: Mutt/1.5.23 (2014-03-12)

On Thu, Nov 26, 2015 at 07:40:10PM +0100, Laszlo Ersek wrote:
> On 11/26/15 08:43, Gerd Hoffmann wrote:
> > On Di, 2015-11-24 at 11:55 -0500, Cole Robinson wrote:
> >> Hi,
> >>
> >> The UUID seabios reports in its boot output doesn't match what is passed 
> >> via
> >> qemu -uuid option. An example is reported here:
> >>
> >> https://bugzilla.redhat.com/show_bug.cgi?id=1284259
> >>
> >> This is due to:
> >>
> >> commit caad057bb6ce86a9cb71520af395fd0bd04a659f
> >> Author: Eduardo Habkost <address@hidden>
> >> Date:   Wed Oct 29 11:26:08 2014 -0200
> >>
> >>     smbios: Encode UUID according to SMBIOS specification
> >>
> >>     Differently from older versions, SMBIOS version 2.6 is explicit about
> >>     the encoding of UUID fields:
> >>
> >>     > Although RFC 4122 recommends network byte order for all fields, the 
> >> PC
> >>     > industry (including the ACPI, UEFI, and Microsoft specifications) has
> >>     > consistently used little-endian byte encoding for the first three 
> >> fields:
> >>     > time_low, time_mid, time_hi_and_version. The same encoding, also 
> >> known as
> >>     > wire format, should also be used for the SMBIOS representation of 
> >> the UUID.
> >>     >
> >>     > The UUID {00112233-4455-6677-8899-AABBCCDDEEFF} would thus be 
> >> represented
> >>     > as 33 22 11 00 55 44 77 66 88 99 AA BB CC DD EE FF.
> >>
> >>     The dmidecode tool implements this and decodes the above "wire format"
> >>     when SMBIOS version >= 2.6. We moved from SMBIOS version 2.4 to 2.8 
> >> when
> >>     we started building the SMBIOS entry point inside QEMU, on commit
> >>     c97294ec1b9e36887e119589d456557d72ab37b5.
> >>
> >>
> >> seabios doesn't seem to handle this special UUID format when reading from 
> >> smbios.
> > 
> > Hmm.  Changing the ordering in display_uuid() is easy.  There seems to
> > be no easy way to figure which format to use though.  Checking the
> > version like dmidecode doesn't fly as there are qemu versions with old
> > format but version smbios 2.8 in the wild ...

QEMU versions with the old format but smbios 2.8 are buggy, and
exposing a broken UUID to guests. I don't believe you need to
work around that QEMU bug in the tools that display the UUID.

That translates to:
* pc-2.2 and later report SMBIOS 2.8 and use the correct format,
  so it's OK
* pc-2.1 is buggy, because it reports SMBIOS 2.8 and use the
  old format
* pc-2.0 and older is OK, because it lets SeaBIOS build the
  SMBIOS tables, which uses the old format and reports SMBIOS 2.4

Showing the wrong UUID when using pc-2.1 seems unavoidable
(because that's a QEMU Bug). But you should be able to display
the right UUID on all other pc versions (pc <= 2.0 or pc >= 2.2).

> 
> Plus, because this is guest visible, Eduardo's patch noted above only
> changes the encoding for 2.2 and later QEMU machine types. If you run
> your reproducer but flip the machine type to 2.1 or earlier, you should
> see the UUID on the SeaBIOS screen change.

Not 2.1 or earlier, but 2.1 only. If you use 2.0 or earlier, the
UUID should be correct.

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]