[ovs-dev] [PATCH] ofproto/ofproto-dpif-sflow: Check sflow agent in case of race

Gavin Li gavinl at nvidia.com
Mon Apr 19 07:26:04 UTC 2021


sFlow agent may not exist while calling dpif_sflow_received. The sFlow
may be deleted in another thread, eg, by user, which will cause crash.

Issue: 2576607
Change-Id: Iad8202be1d06cda7d096109a2719ef934d245248
Signed-off-by: Gavin Li <gavinl at nvidia.com>
Reviewed-by: Gavi Teitz <gavi at nvidia.com>
---
 ofproto/ofproto-dpif-sflow.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ofproto/ofproto-dpif-sflow.c b/ofproto/ofproto-dpif-sflow.c
index fdcb9ea..864c136 100644
--- a/ofproto/ofproto-dpif-sflow.c
+++ b/ofproto/ofproto-dpif-sflow.c
@@ -1292,10 +1292,10 @@ dpif_sflow_received(struct dpif_sflow *ds, const struct dp_packet *packet,
     ovs_be16 vlan_tci;
 
     ovs_mutex_lock(&mutex);
-    sampler = ds->sflow_agent->samplers;
-    if (!sampler) {
+    if (!ds->sflow_agent || !ds->sflow_agent->samplers) {
         goto out;
     }
+    sampler = ds->sflow_agent->samplers;
 
     /* Build a flow sample. */
     memset(&fs, 0, sizeof fs);
-- 
1.8.3.1



More information about the dev mailing list