ip: only set rx_sw_if_index when connection found to avoid following crash like tcp... 68/36868/2
authorXiaoming Jiang <jiangxiaoming@outlook.com>
Thu, 11 Aug 2022 15:04:48 +0000 (15:04 +0000)
committerXiaoming Jiang <jiangxiaoming@outlook.com>
Thu, 11 Aug 2022 15:13:51 +0000 (15:13 +0000)
Type: fix
Signed-off-by: Xiaoming Jiang <jiangxiaoming@outlook.com>
Change-Id: I894a881cec1888b392d26fdfb385f97c31113ef1

src/vnet/tcp/tcp_inlines.h

index d57b305..69f8ce7 100644 (file)
@@ -237,10 +237,6 @@ tcp_input_lookup_buffer (vlib_buffer_t * b, u8 thread_index, u32 * error,
   tcp_header_t *tcp;
   u8 result = 0;
 
-  /* Set the sw_if_index[VLIB_RX] to the interface we received
-   * the connection on (the local interface) */
-  vnet_buffer (b)->sw_if_index[VLIB_RX] = vnet_buffer (b)->ip.rx_sw_if_index;
-
   if (is_ip4)
     {
       ip4_header_t *ip4 = vlib_buffer_get_current (b);
@@ -297,7 +293,7 @@ tcp_input_lookup_buffer (vlib_buffer_t * b, u8 thread_index, u32 * error,
            {
              ip6_main_t *im = &ip6_main;
              fib_index = vec_elt (im->fib_index_by_sw_if_index,
-                                  vnet_buffer (b)->sw_if_index[VLIB_RX]);
+                                  vnet_buffer (b)->ip.rx_sw_if_index);
            }
 
          tc = session_lookup_connection_wt6 (fib_index, &ip6->dst_address,
@@ -308,6 +304,10 @@ tcp_input_lookup_buffer (vlib_buffer_t * b, u8 thread_index, u32 * error,
        }
     }
 
+  /* Set the sw_if_index[VLIB_RX] to the interface we received
+   * the connection on (the local interface) */
+  vnet_buffer (b)->sw_if_index[VLIB_RX] = vnet_buffer (b)->ip.rx_sw_if_index;
+
   if (is_nolookup)
     tc =
       (transport_connection_t *) tcp_connection_get (vnet_buffer (b)->