[Libvirt-cim] [PATCH] This fixes a potential crash if _get_domain() is unable to properly parse the dom XML
Kaitlin Rupert
kaitlin at linux.vnet.ibm.com
Tue Nov 13 01:18:03 UTC 2007
Dan Smith wrote:
> KR> ret = _get_dominfo(xml, *dominfo);
> KR> + if (!ret) {
> KR> + free(*dominfo);
> KR> + *dominfo = NULL;
> KR> + return 0;
> KR> + }
> KR> +
> KR> free(xml);
>
> You've just introduced a memory leak here, since xml won't get
> free()'d. Just remove the "return 0" and let it fall through and it
> should be fine.
>
Yep, good call. Although, if we fall through here, we run into problems
with the (*dominfo)->dev_mem_ct = get_mem_devices(dom,
&(*dominfo)->dev_mem); related pieces since dominfo is NULL. Instead, I
think it should be:
ret = _get_dominfo(xml, *dominfo);
free(xml);
if (!ret) {
free(*dominfo);
*dominfo = NULL;
return 0;
}
>
> KR> - if (!get_dominfo(dom, &dominfo))
> KR> + ret = get_dominfo(dom, &dominfo);
> KR> + if (!ret)
> KR> goto out;
>
> Maybe my eyes are tired at the end of the day, but does this fix
> anything or is it just a style change?
>
We need to capture ret from get_domain(). ret is initialized to 1. If
we don't capture the ret from get_domain(), then we return 1 to
get_vssd_instance(). This causes the if statement to pass, and we
return an empty instance. If get_domain() fails, we need to return NULL.
--
Kaitlin Rupert
IBM Linux Technology Center
karupert at us.ibm.com
More information about the Libvirt-cim
mailing list