[libvirt] [PATCH] esx: Ignore malformed host UUID from BIOS

Matthias Bolte matthias.bolte at googlemail.com
Fri Feb 18 17:17:15 UTC 2011


2011/2/18 Eric Blake <eblake at redhat.com>:
> On 02/18/2011 02:30 AM, Matthias Bolte wrote:
>> Etienne Gosset reported that libvirt fails to connect to his ESX
>> server because it failed to parse its malformed host UUID, that
>> contains a additional space and lacks one hexdigit in the last
>> group:
>>
>> xxxxxxxx-xxxx-xxxx-xxxx- xxxxxxxxxxx
>
> Could this merely be a case of the host UUID printing with %12llx
> instead of %012llx?  That is, would it be worth teaching our parser that
> if the initial parse fails, then try again by substituting leading
> spaces as implicit 0s to see if that makes it valid?  Or is that
> situation rare enough that the fallback parse is not worth the effort.

Interesting idea, but I think %12llx vs %012llx is not the problem
here, as I have an ESX server here that has a host UUID with leading
zeros in the last group.

The actual question I have left is who broke the UUID. Is it already
malformed in the BIOS, or does the ESX server mess it up? I just found
out that dmidecode is available in the service console so I can ask
Etienne to lookup the UUID directly.

>>
>> Don't treat this as a fatal error, just ignore it.
>> ---
>>  src/esx/esx_driver.c |    9 +++++----
>>  1 files changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
>> index 97f3dbe..116ad0f 100644
>> --- a/src/esx/esx_driver.c
>> +++ b/src/esx/esx_driver.c
>> @@ -518,10 +518,11 @@ esxLookupHostSystemBiosUuid(esxPrivate *priv, unsigned char *uuid)
>>
>>              if (strlen(dynamicProperty->val->string) > 0) {
>>                  if (virUUIDParse(dynamicProperty->val->string, uuid) < 0) {
>> -                    ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
>> -                              _("Could not parse UUID from string '%s'"),
>> -                              dynamicProperty->val->string);
>> -                    goto cleanup;
>> +                    VIR_WARN("Could not parse host UUID from string '%s'",
>> +                             dynamicProperty->val->string);
>> +
>> +                    /* HostSystem has an invalid UUID, ignore it */
>> +                    memset(uuid, 0, VIR_UUID_BUFLEN);
>
>
> At any rate, ACK to this patch, whether or not we try to teach uuid
> parsing to be more tolerant of buggy UUIDs like this.
>

Thanks, pushed.

Matthias




More information about the libvir-list mailing list