[ovs-dev] [PATCH 1/2] dpif-netdev: Fix flow mark leak on port lookup failure.
Ilya Maximets
i.maximets at samsung.com
Mon May 13 14:01:59 UTC 2019
Flow mark should be properly freed in all error cases.
Fixes: 241bad15d99a ("dpif-netdev: associate flow with a mark id")
Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
---
lib/dpif-netdev.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 5a6f2abac..4ee367556 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -2383,7 +2383,7 @@ dp_netdev_flow_offload_put(struct dp_flow_offload_item *offload)
port = dp_netdev_lookup_port(pmd->dp, in_port);
if (!port) {
ovs_mutex_unlock(&pmd->dp->port_mutex);
- return -1;
+ goto err_free;
}
ret = netdev_flow_put(port->netdev, &offload->match,
CONST_CAST(struct nlattr *, offload->actions),
@@ -2392,20 +2392,22 @@ dp_netdev_flow_offload_put(struct dp_flow_offload_item *offload)
ovs_mutex_unlock(&pmd->dp->port_mutex);
if (ret) {
- if (!modification) {
- flow_mark_free(mark);
- } else {
- mark_to_flow_disassociate(pmd, flow);
- }
- return -1;
+ goto err_free;
}
if (!modification) {
megaflow_to_mark_associate(&flow->mega_ufid, mark);
mark_to_flow_associate(mark, flow);
}
-
return 0;
+
+err_free:
+ if (!modification) {
+ flow_mark_free(mark);
+ } else {
+ mark_to_flow_disassociate(pmd, flow);
+ }
+ return -1;
}
static void *
--
2.17.1
More information about the dev
mailing list