nat: do not use nat session object after deletion 42/37742/4
authorBenoît Ganne <bganne@cisco.com>
Thu, 22 Dec 2022 14:01:21 +0000 (15:01 +0100)
committerOle Tr�an <otroan@employees.org>
Wed, 11 Jan 2023 07:13:27 +0000 (07:13 +0000)
Type: fix

Change-Id: Ifc709b6e7217a893d13aee6d3019e699637366ef
Signed-off-by: Benoît Ganne <bganne@cisco.com>
src/plugins/nat/nat44-ed/nat44_ed_in2out.c
src/plugins/nat/nat44-ed/nat44_ed_out2in.c

index 61ce70f..f41fcac 100644 (file)
@@ -1194,6 +1194,7 @@ nat44_ed_in2out_fast_path_node_fn_inline (vlib_main_t *vm,
          // session is closed, go slow path
          nat44_ed_free_session_data (sm, s0, thread_index, 0);
          nat_ed_session_delete (sm, s0, thread_index, 1);
+         s0 = 0;
          next[0] = def_slow;
          goto trace0;
        }
@@ -1206,6 +1207,7 @@ nat44_ed_in2out_fast_path_node_fn_inline (vlib_main_t *vm,
        {
          nat44_ed_free_session_data (sm, s0, thread_index, 0);
          nat_ed_session_delete (sm, s0, thread_index, 1);
+         s0 = 0;
          // session is closed, go slow path
          next[0] = def_slow;
          goto trace0;
@@ -1227,6 +1229,7 @@ nat44_ed_in2out_fast_path_node_fn_inline (vlib_main_t *vm,
          translation_error = NAT_ED_TRNSL_ERR_FLOW_MISMATCH;
          nat44_ed_free_session_data (sm, s0, thread_index, 0);
          nat_ed_session_delete (sm, s0, thread_index, 1);
+         s0 = 0;
          next[0] = NAT_NEXT_DROP;
          b0->error = node->errors[NAT_IN2OUT_ED_ERROR_TRNSL_FAILED];
          goto trace0;
@@ -1238,6 +1241,7 @@ nat44_ed_in2out_fast_path_node_fn_inline (vlib_main_t *vm,
        {
          nat44_ed_free_session_data (sm, s0, thread_index, 0);
          nat_ed_session_delete (sm, s0, thread_index, 1);
+         s0 = 0;
          next[0] = NAT_NEXT_DROP;
          b0->error = node->errors[NAT_IN2OUT_ED_ERROR_TRNSL_FAILED];
          goto trace0;
@@ -1395,6 +1399,7 @@ nat44_ed_in2out_slow_path_node_fn_inline (vlib_main_t *vm,
            {
              nat44_ed_free_session_data (sm, s0, thread_index, 0);
              nat_ed_session_delete (sm, s0, thread_index, 1);
+             s0 = 0;
              next[0] = NAT_NEXT_DROP;
              b0->error = node->errors[NAT_IN2OUT_ED_ERROR_TRNSL_FAILED];
              goto trace0;
@@ -1418,6 +1423,7 @@ nat44_ed_in2out_slow_path_node_fn_inline (vlib_main_t *vm,
            {
              nat44_ed_free_session_data (sm, s0, thread_index, 0);
              nat_ed_session_delete (sm, s0, thread_index, 1);
+             s0 = 0;
              next[0] = NAT_NEXT_DROP;
              b0->error = node->errors[NAT_IN2OUT_ED_ERROR_TRNSL_FAILED];
              goto trace0;
@@ -1496,6 +1502,7 @@ nat44_ed_in2out_slow_path_node_fn_inline (vlib_main_t *vm,
        {
          nat44_ed_free_session_data (sm, s0, thread_index, 0);
          nat_ed_session_delete (sm, s0, thread_index, 1);
+         s0 = 0;
          next[0] = NAT_NEXT_DROP;
          b0->error = node->errors[NAT_IN2OUT_ED_ERROR_TRNSL_FAILED];
          goto trace0;
index dfe4a15..fe4a41c 100644 (file)
@@ -881,6 +881,7 @@ nat44_ed_out2in_fast_path_node_fn_inline (vlib_main_t * vm,
          // session is closed, go slow path
          nat44_ed_free_session_data (sm, s0, thread_index, 0);
          nat_ed_session_delete (sm, s0, thread_index, 1);
+         s0 = 0;
          slow_path_reason = NAT_ED_SP_REASON_VRF_EXPIRED;
          next[0] = NAT_NEXT_OUT2IN_ED_SLOW_PATH;
          goto trace0;
@@ -895,6 +896,7 @@ nat44_ed_out2in_fast_path_node_fn_inline (vlib_main_t * vm,
          // session is closed, go slow path
          nat44_ed_free_session_data (sm, s0, thread_index, 0);
          nat_ed_session_delete (sm, s0, thread_index, 1);
+         s0 = 0;
          slow_path_reason = NAT_ED_SP_SESS_EXPIRED;
          next[0] = NAT_NEXT_OUT2IN_ED_SLOW_PATH;
          goto trace0;
@@ -943,6 +945,7 @@ nat44_ed_out2in_fast_path_node_fn_inline (vlib_main_t * vm,
                  translation_error = NAT_ED_TRNSL_ERR_FLOW_MISMATCH;
                  nat44_ed_free_session_data (sm, s0, thread_index, 0);
                  nat_ed_session_delete (sm, s0, thread_index, 1);
+                 s0 = 0;
                  next[0] = NAT_NEXT_DROP;
                  b0->error = node->errors[NAT_OUT2IN_ED_ERROR_TRNSL_FAILED];
                  goto trace0;