[Libvirt-cim] [PATCH] RPCS: enumerateInstance(Name)s and getInstance with wrong hypervisor segfaults

Heidi Eckhart heidieck at linux.vnet.ibm.com
Mon Feb 4 09:46:20 UTC 2008


Kaitlin Rupert wrote:
> Heidi Eckhart wrote:
>> diff -r cb0e8b858f42 -r 6b1bf8231d82 
>> src/Virt_ResourcePoolConfigurationService.c
>> --- a/src/Virt_ResourcePoolConfigurationService.c    Fri Feb 01 
>> 11:17:15 2008 +0100
>> +++ b/src/Virt_ResourcePoolConfigurationService.c    Fri Feb 01 
>> 12:20:46 2008 +0100
>> @@ -100,15 +100,20 @@ CMPIStatus rpcs_instance(const CMPIObjec
>>  {
>>          CMPIInstance *inst;
>>          CMPIInstance *host;
>> -        CMPIStatus s;
>> +        CMPIStatus s = {CMPI_RC_OK, NULL};
>>          CMPIData prop;
>> +        virConnectPtr conn = NULL;
>> +
>> +        conn = connect_by_classname(_BROKER, CLASSNAME(reference), &s);
>> +        if (conn == NULL)
>> +                goto out;
>
> I would also set the status here. This would mean we don't need to 
> check for a NULL instance everywhere rpcs_instance() is called.
Well, this function is used for enumeration and get requests. Setting an 
error code for conn==NULL would break the CIM model for enumeration 
request. An enumeration against CIM_RPCS on a Xen system with no KVM, 
would get the error for KVM and valid instances for Xen. But this KVM 
error would then cause the CIMOM to skip all returned and valid Xen 
instances. In the case of a get, setting this error code indeed is required.
But the idea behind your comment is good. I will reorganize the 
functions a bit and will resend the patch.
>
> Virt_HostedService calls rpcs_instance(), but currently doesn't check 
> for a NULL.  So if don't set the status here, HostedService will need 
> to be updated to check for a NULL instance.
>
Thanks for this hint :). I will fix this.

-- 
Regards

Heidi Eckhart
Software Engineer
IBM Linux Technology Center - Open Hypervisor




More information about the Libvirt-cim mailing list