snat: fix coverity issues 76/3976/1
authorMatus Fabian <matfabia@cisco.com>
Mon, 28 Nov 2016 13:36:24 +0000 (05:36 -0800)
committerMatus Fabian <matfabia@cisco.com>
Mon, 28 Nov 2016 13:36:24 +0000 (05:36 -0800)
Change-Id: Icb8239c02af8758a9e4bf299726a89677f53451d
Signed-off-by: Matus Fabian <matfabia@cisco.com>
plugins/snat-plugin/snat/in2out.c
plugins/snat-plugin/snat/out2in.c
plugins/snat-plugin/snat/snat.c

index e1edbb8..43ee2d0 100644 (file)
@@ -1047,6 +1047,8 @@ snat_in2out_worker_handoff_fn (vlib_main_t * vm,
   u32 current_worker_index = ~0;
   u32 cpu_index = os_get_cpu_number ();
 
+  ASSERT (vec_len (sm->workers));
+
   if (PREDICT_FALSE (handoff_queue_elt_by_worker_index == 0))
     {
       vec_validate (handoff_queue_elt_by_worker_index, tm->n_vlib_mains - 1);
index a4641d3..13e596b 100644 (file)
@@ -830,6 +830,8 @@ snat_out2in_worker_handoff_fn (vlib_main_t * vm,
   u32 current_worker_index = ~0;
   u32 cpu_index = os_get_cpu_number ();
 
+  ASSERT (vec_len (sm->workers));
+
   if (PREDICT_FALSE (handoff_queue_elt_by_worker_index == 0))
     {
       vec_validate (handoff_queue_elt_by_worker_index, tm->n_vlib_mains - 1);
@@ -888,6 +890,8 @@ snat_out2in_worker_handoff_fn (vlib_main_t * vm,
 
       if (PREDICT_FALSE (next_worker_index != cpu_index))
         {
+          do_handoff = 1;
+
           if (next_worker_index != current_worker_index)
             {
               if (hf)
index 70df44e..02077c3 100644 (file)
@@ -494,8 +494,10 @@ int snat_add_static_mapping(ip4_address_t l_addr, ip4_address_t e_addr,
           if (!clib_bihash_search_8_8 (&sm->user_hash, &kv, &value))
             {
               user_index = value.value;
-              clib_bihash_search_8_8 (&sm->worker_by_in, &kv, &value);
-              tsm = vec_elt_at_index (sm->per_thread_data, value.value);
+              if (!clib_bihash_search_8_8 (&sm->worker_by_in, &kv, &value))
+                tsm = vec_elt_at_index (sm->per_thread_data, value.value);
+              else
+                tsm = vec_elt_at_index (sm->per_thread_data, sm->num_workers);
               u = pool_elt_at_index (tsm->users, user_index);
               if (u->nstaticsessions)
                 {