[libvirt] [PATCH] lxcFreezeContainer: avoid test-after-deref of never-NULL pointer

Jim Meyering jim at meyering.net
Mon May 17 18:00:09 UTC 2010


Eric Blake wrote:

> On 05/17/2010 11:40 AM, Jim Meyering wrote:
>> Eric Blake wrote:
>>> On 05/17/2010 11:22 AM, Jim Meyering wrote:
>>>> This addresses another coverity-spotted "flaw".
>>>> However, since "cgroup" is never NULL after that initial "if" stmt,
>>>> the only penalty is that the useless cleanup test would make a reviewer
>>>> try to figure out how cgroup could be NULL there.
>>>
>>> ACK.
>>
>> Thanks.
>>
>>>>  cleanup:
>>>> -    if (cgroup)
>>>> -        virCgroupFree(&cgroup);
>>>> +    virCgroupFree(&cgroup);
>
> Hmm, on re-reading this, why is virCgroupFree taking a pointer to a
> virCgroupPtr, then blindly dereferencing it throughout the cleanup?  It
> almost seems like we have the wrong signature, and should be using:
>
> virCgroupFree(virCgroupPtr group)
>
> instead of
>
> virCgroupFree(virCgroupPtr *group)
>
> and adjust all callers.

Almost.
virCgroupPtr takes an address of a pointer so it can set the caller's
pointer to NULL (via its VIR_FREE use).  Otherwise, in order to retain
existing semantics, some callers would have to change from this:

  virCgroupFree(&p);

to this:

  virCgroupFree(p);
  p = NULL;


>> This makes the useless-if-before-free test in maint.mk spot
>> uses of virCgroupFree just like it does for free and the other
>> listed functions.
>> * cfg.mk (useless_free_options): Add virCgroupFree.
>> Prompted by suggestion from Eric Blake.
>
> ACK, given the current semantics of virCgroupFree.

Thanks.




More information about the libvir-list mailing list