flow: fix several crash issues 82/23582/2
authorChenmin Sun <chenmin.sun@intel.com>
Thu, 21 Nov 2019 21:33:40 +0000 (05:33 +0800)
committerDamjan Marion <dmarion@me.com>
Tue, 26 Nov 2019 13:27:36 +0000 (13:27 +0000)
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 <chenmin.sun@intel.com>
Change-Id: I84bc6faa3d93a2cab4c82e8a876a8b1067257b62

src/plugins/dpdk/device/flow.c
src/vnet/flow/flow.c

index 7938568..c20da25 100644 (file)
@@ -513,8 +513,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,
index 4d867fe..9b6a376 100644 (file)
@@ -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;