[SeaBIOS] [PATCH] biostables: Support SMBIOS 2.6+ UUID format

Kevin O'Connor kevin at koconnor.net
Thu Jan 14 18:22:51 CET 2016


On Tue, Jan 12, 2016 at 02:22:41PM -0500, Cole Robinson wrote:
> SMBIOS 2.6+ stores the UUID in a different format, with the first 3
> fields in little endian format. This is what modern qemu delivers
> and what dmidecode also handles, so let's follow suit too. More
> info at this thread:
> 
> http://www.seabios.org/pipermail/seabios/2015-November/010031.html
> 
> The only place this affects is when reporting the UUID at startup.
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=1284259
> ---
>  src/fw/biostables.c | 51 ++++++++++++++++++++++++++++++++++++++++-----------
>  1 file changed, 40 insertions(+), 11 deletions(-)
> 
> diff --git a/src/fw/biostables.c b/src/fw/biostables.c
> index cb74396..2e15f82 100644
> --- a/src/fw/biostables.c
> +++ b/src/fw/biostables.c
> @@ -306,17 +306,46 @@ display_uuid(void)
>              if (memcmp(uuid, empty_uuid, sizeof(empty_uuid)) == 0)
>                  return;
>  
> -            printf("Machine UUID"
> -                   " %02x%02x%02x%02x"
> -                   "-%02x%02x"
> -                   "-%02x%02x"
> -                   "-%02x%02x"
> -                   "-%02x%02x%02x%02x%02x%02x\n"
> -                   , uuid[ 0], uuid[ 1], uuid[ 2], uuid[ 3]
> -                   , uuid[ 4], uuid[ 5]
> -                   , uuid[ 6], uuid[ 7]
> -                   , uuid[ 8], uuid[ 9]
> -                   , uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]);
> +            /*
> +            * comment borrowed from dmidecode:
> +            *
> +            * As of version 2.6 of the SMBIOS specification, the first 3
> +            * fields of the UUID are supposed to be encoded on little-endian.
> +            * The specification says that this is the defacto standard,
> +            * however I've seen systems following RFC 4122 instead and use
> +            * network byte order, so I am reluctant to apply the byte-swapping
> +            * for older versions.
> +            */

I find this comment confusing - how about something like:

According to SMBIOS v2.6 the first three fields are encoded in
little-endian format.  Versions prior to v2.6 did not specify the
encoding, but we follow dmidecode and assume big-endian encoding.

> +            if (SMBiosAddr->smbios_major_version > 2 ||
> +                (SMBiosAddr->smbios_major_version == 2 &&
> +                 SMBiosAddr->smbios_minor_version >= 6)) {
> +                printf("Machine UUID"
> +                       " %02x%02x%02x%02x"
> +                       "-%02x%02x"
> +                       "-%02x%02x"
> +                       "-%02x%02x"
> +                       "-%02x%02x%02x%02x%02x%02x\n"
> +                       , uuid[ 3], uuid[ 2], uuid[ 1], uuid[ 0]
> +                       , uuid[ 5], uuid[ 4]
> +                       , uuid[ 7], uuid[ 6]
> +                       , uuid[ 8], uuid[ 9]
> +                       , uuid[10], uuid[11], uuid[12]
> +                       , uuid[13], uuid[14], uuid[15]);
> +            } else {
> +                printf("Machine UUID"
> +                       " %02x%02x%02x%02x"
> +                       "-%02x%02x"
> +                       "-%02x%02x"
> +                       "-%02x%02x"
> +                       "-%02x%02x%02x%02x%02x%02x\n"
> +                       , uuid[ 0], uuid[ 1], uuid[ 2], uuid[ 3]
> +                       , uuid[ 4], uuid[ 5]
> +                       , uuid[ 6], uuid[ 7]
> +                       , uuid[ 8], uuid[ 9]
> +                       , uuid[10], uuid[11], uuid[12]
> +                       , uuid[13], uuid[14], uuid[15]);
> +            }

The above is okay to me, but I'd like to get Gerd's comments as well,
as I think he had some concerns the last time it came up.

-Kevin



More information about the SeaBIOS mailing list