[libvirt] [PATCH] network: Set to NULL after virNetworkDefFree()

Michal Privoznik mprivozn at redhat.com
Thu Oct 18 15:03:15 UTC 2012


On 18.10.2012 17:02, Jiri Denemark wrote:
> On Thu, Oct 18, 2012 at 16:44:24 +0200, Michal Privoznik wrote:
>> which frees all allocated memory but doesn't set the passed pointer to
>> NULL.  Therefore, we must do it ourselves. This is causing actual
>> libvirtd crash: Basically, when doing 'virsh net-edit' the newDef should
>> be dropped.  And the memory is freed, indeed. However, the pointer is
>> not set to NULL but kept instead. And the next duo of calls 'virsh
>> net-start' and 'virsh net-destroy' starts the disaster. The latter one
>> does the same as 'virsh destroy'; it sees that newDef is nonNULL so it
>> replaces def with newDef (which has been freed already as said a few
>> lines above). Therefore any subsequent call accessing def will hit the ground.
>> ---
>>  src/conf/network_conf.c |    3 ++-
>>  1 files changed, 2 insertions(+), 1 deletions(-)
>>
>> diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
>> index 891d48c..0f7470d 100644
>> --- a/src/conf/network_conf.c
>> +++ b/src/conf/network_conf.c
>> @@ -260,8 +260,9 @@ virNetworkObjAssignDef(virNetworkObjPtr network,
>>              return -1;
>>          }
>>      } else if (!live) {
>> -        virNetworkDefFree(network->newDef); /* should be unnecessary */
>> +        virNetworkDefFree(network->newDef);
>>          virNetworkDefFree(network->def);
>> +        network->newDef = NULL;
>>          network->def = def;
>>      } else {
>>          virReportError(VIR_ERR_OPERATION_INVALID,
> 
> ACK
> 
> Jirka
> 

Thanks, pushed.

Michal




More information about the libvir-list mailing list