• L
    network: free/null newDef if network fails to start · 78fab277
    Laine Stump 提交于
    https://bugzilla.redhat.com/show_bug.cgi?id=866364
    
    pointed out a crash due to virNetworkObjAssignDef free'ing
    network->newDef without NULLing it afterward. A fix for this is in
    upstream commit b7e92024. While the
    NULLing of newDef was a legitimate fix, newDef should have already
    been empty (NULL) anyway (as indicated in the comment that was deleted
    by that commit).
    
    The reason that newDef had a non-NULL value (i.e. the root cause) was
    that networkStartNetwork() had failed after populating
    network->newDef, but then neglected to free/NULL newDef in the
    cleanup.
    
    (A bit of background here: network->newDef should contain the
    persistent config of a network when a network is active (and of course
    only when it is persisten), and NULL at all other times. There is also
    a network->def which should contain the persistent definition of the
    network when it is inactive, and the current live state at all other
    times. The idea is that you can make changes to network->newDef which
    will take effect the next time the network is restarted, but won't
    mess with the current state of the network (virDomainObj has a similar
    pair of virDomainDefs that behave in the same fashion). Personally I
    think there should be a network->live and network->config, and the
    location of the persistent config should *always* be in
    network->config, but that's for a later cleanup).
    
    Since I love things to be symmetric, I created a new function called
    virNetworkObjUnsetDefTransient(), which reverses the effects of
    virNetworkObjSetDefTransient(). I don't really like the name of the
    new function, but then I also didn't really like the name of the old
    one either (it's just named that way to match a similar function in
    the domain conf code).
    78fab277
bridge_driver.c 134.8 KB