mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-27 19:11:16 +00:00
Fix leak on OOM when creating nwfilter rule instances
The ebiptablesAddRuleInst method would leak an instance of ebiptablesRuleInstPtr if it hit OOM when adding it to the list of instances. Remove the pointless helper method virNWFilterRuleInstAddData and just inline the call to VIR_APPEND_ELEMENT and free the instance on failure. Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
e23ca83a0d
commit
9f7da130f4
@ -507,7 +507,11 @@ ebiptablesAddRuleInst(virNWFilterRuleInstPtr res,
|
|||||||
inst->priority = priority;
|
inst->priority = priority;
|
||||||
inst->ruleType = ruleType;
|
inst->ruleType = ruleType;
|
||||||
|
|
||||||
return virNWFilterRuleInstAddData(res, inst);
|
if (VIR_APPEND_ELEMENT(res->data, res->ndata, inst) < 0) {
|
||||||
|
VIR_FREE(inst);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -115,28 +115,6 @@ virNWFilterTechDriverForName(const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* virNWFilterRuleInstAddData:
|
|
||||||
* @res : pointer to virNWFilterRuleInst object collecting the instantiation
|
|
||||||
* data of a single firewall rule.
|
|
||||||
* @data : the opaque data that the driver wants to add
|
|
||||||
*
|
|
||||||
* Add instantiation data to a firewall rule. An instantiated firewall
|
|
||||||
* rule may hold multiple data structure representing its instantiation
|
|
||||||
* data. This may for example be the case if a rule has been defined
|
|
||||||
* for bidirectional traffic and data needs to be added to the incoming
|
|
||||||
* and outgoing chains.
|
|
||||||
*
|
|
||||||
* Returns 0 in case of success, -1 in case of an error.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
virNWFilterRuleInstAddData(virNWFilterRuleInstPtr res,
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
return VIR_APPEND_ELEMENT(res->data, res->ndata, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
virNWFilterRuleInstFree(virNWFilterRuleInstPtr inst)
|
virNWFilterRuleInstFree(virNWFilterRuleInstPtr inst)
|
||||||
{
|
{
|
||||||
|
@ -28,9 +28,6 @@
|
|||||||
|
|
||||||
virNWFilterTechDriverPtr virNWFilterTechDriverForName(const char *name);
|
virNWFilterTechDriverPtr virNWFilterTechDriverForName(const char *name);
|
||||||
|
|
||||||
int virNWFilterRuleInstAddData(virNWFilterRuleInstPtr res,
|
|
||||||
void *data);
|
|
||||||
|
|
||||||
int virNWFilterTechDriversInit(bool privileged);
|
int virNWFilterTechDriversInit(bool privileged);
|
||||||
void virNWFilterTechDriversShutdown(void);
|
void virNWFilterTechDriversShutdown(void);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user