From cb3edd53e8ba606245c9965a374f7719d4367a60 Mon Sep 17 00:00:00 2001 From: Chenmin Sun Date: Fri, 22 Nov 2019 05:33:40 +0800 Subject: flow: fix several crash issues Type: fix This patch fixes crash issues(marked in brackets) in the below test cases test flow enable index 0 1/1 -> [crash] test flow disable index 0 1/1 -> [crash] test flow add src-ip 192.168.8.8 proto udp redirect-to-queue 8 test flow enable index 0 1/1 test flow disable index 0 1/1 - [crash] test flow add src-ip 192.168.8.8 proto udp redirect-to-queue 8 test flow enable index 0 1/1 test flow enable index 0 1/2 test flow del index 0 -> [crash] Signed-off-by: Chenmin Sun Change-Id: I84bc6faa3d93a2cab4c82e8a876a8b1067257b62 (cherry picked from commit be2ad0b4743ed8a3875a5b6039c10c66eb07614c) --- MAINTAINERS | 5 +++++ src/plugins/dpdk/device/flow.c | 2 -- src/vnet/flow/flow.c | 6 ++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index c20632c2fa0..0c65e3aea9c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -275,6 +275,11 @@ I: syslog M: Matus Fabian F: src/vnet/syslog +VNET FLOW +I: flow +M: Damjan Marion +F: src/vnet/flow/ + Plugin - Access Control List (ACL) Based Forwarding I: abf M: Neale Ranns diff --git a/src/plugins/dpdk/device/flow.c b/src/plugins/dpdk/device/flow.c index 1b8b5906b1c..0a8cc4573bc 100644 --- a/src/plugins/dpdk/device/flow.c +++ b/src/plugins/dpdk/device/flow.c @@ -272,8 +272,6 @@ dpdk_flow_ops_fn (vnet_main_t * vnm, vnet_flow_dev_op_t op, u32 dev_instance, if (op == VNET_FLOW_DEV_OP_DEL_FLOW) { - ASSERT (*private_data >= vec_len (xd->flow_entries)); - fe = vec_elt_at_index (xd->flow_entries, *private_data); if ((rv = rte_flow_destroy (xd->device_index, fe->handle, diff --git a/src/vnet/flow/flow.c b/src/vnet/flow/flow.c index 4d867fee365..9b6a376af3e 100644 --- a/src/vnet/flow/flow.c +++ b/src/vnet/flow/flow.c @@ -96,6 +96,9 @@ vnet_flow_enable (vnet_main_t * vnm, u32 flow_index, u32 hw_if_index) uword private_data; int rv; + if (f == 0) + return VNET_FLOW_ERROR_NO_SUCH_ENTRY; + if (!vnet_hw_interface_is_valid (vnm, hw_if_index)) return VNET_FLOW_ERROR_NO_SUCH_INTERFACE; @@ -137,6 +140,9 @@ vnet_flow_disable (vnet_main_t * vnm, u32 flow_index, u32 hw_if_index) uword *p; int rv; + if (f == 0) + return VNET_FLOW_ERROR_NO_SUCH_ENTRY; + if (!vnet_hw_interface_is_valid (vnm, hw_if_index)) return VNET_FLOW_ERROR_NO_SUCH_INTERFACE; -- cgit 1.2.3-korg