[libvirt] [PATCH] macvtap: plug memory leak for 802.1Qbh
Roopa Prabhu
roprabhu at cisco.com
Fri Oct 14 21:05:02 UTC 2011
On 10/14/11 1:55 PM, "Eric Blake" <eblake at redhat.com> wrote:
> On 10/14/2011 02:41 PM, Roopa Prabhu wrote:
>>
>>
>>
>> On 10/13/11 3:49 PM, "Eric Blake"<eblake at redhat.com> wrote:
>>
>>> Detected by Coverity. Leak present since commit ca3b22b.
>>>
>>> * src/util/macvtap.c (doPortProfileOp8021Qbh): Release device name.
>>> ---
>>> getPhysfnDev allocates physfndev, but nothing freed it.
>>> Pushing under the trivial rule.
>>
>> Actually looks like physfndev is conditionally allocated in getPhysfnDev
>> Its better to modify getPhysfnDev to allocate physfndev every time.
>
> Also a good catch - otherwise we might have a double free or otherwise
> crash on freeing an invalid pointer.
>
>>
>>
>> I ACK this patch with the additional change below (looks ok ?)
>>
>> diff --git a/src/util/macvtap.c b/src/util/macvtap.c
>> index a020c90..b50b7d2 100644
>> --- a/src/util/macvtap.c
>> +++ b/src/util/macvtap.c
>> @@ -964,7 +964,7 @@ getPhysfnDev(const char *linkdev,
>> */
>>
>> *vf = PORT_SELF_VF;
>> - *physfndev = (char *)linkdev;
>> + *physfndev = strdup(linkdev);
>
> I had already pushed mine. Yours is missing a virReportOOMError() on
> allocation failure; but ACK with that improvement.
>
> Meanwhile, we need to scrub this file - it uses a convention of 1 on
> error, instead of the more typical -1 on error in the rest of the code
> base; but I want this bug fix to be separate from that subsequent cleanup.
>
> diff --git i/src/util/macvtap.c w/src/util/macvtap.c
> index b50b7d2..33f0a13 100644
> --- i/src/util/macvtap.c
> +++ w/src/util/macvtap.c
> @@ -965,6 +965,10 @@ getPhysfnDev(const char *linkdev,
>
> *vf = PORT_SELF_VF;
> *physfndev = strdup(linkdev);
> + if (!*physfndev) {
> + virReportOOMError();
> + rc = -1;
> + }
> }
>
> return rc;
>
Great. Thanks!. I will send out a patch for the bug fix and later work on
the fixing the error return convention.
More information about the libvir-list
mailing list