SNAT: fixed crash - interface without IP address (VPP-599) 78/4678/2
authorMatus Fabian <matfabia@cisco.com>
Fri, 13 Jan 2017 13:35:34 +0000 (05:35 -0800)
committerDamjan Marion <dmarion.lists@gmail.com>
Fri, 13 Jan 2017 15:44:35 +0000 (15:44 +0000)
Change-Id: I7f4d0cbde3d3c4ed6537e6351d5487546daea058
Signed-off-by: Matus Fabian <matfabia@cisco.com>
src/plugins/snat/in2out.c
src/plugins/snat/out2in.c

index c78fdd7..cd8f127 100644 (file)
@@ -350,7 +350,10 @@ static inline u32 icmp_in2out_slow_path (snat_main_t *sm,
             ip4_interface_first_address (sm->ip4_main, sw_if_index0,
                                          0 /* just want the address */);
           rt->cached_sw_if_index = sw_if_index0;
-          rt->cached_ip4_address = first_int_addr->as_u32;
+          if (first_int_addr)
+            rt->cached_ip4_address = first_int_addr->as_u32;
+          else
+            rt->cached_ip4_address = 0;
         }
       
       /* Don't NAT packet aimed at the intfc address */
@@ -640,7 +643,10 @@ snat_in2out_node_fn_inline (vlib_main_t * vm,
                         ip4_interface_first_address (sm->ip4_main, sw_if_index0,
                                                      0 /* just want the address */);
                       rt->cached_sw_if_index = sw_if_index0;
-                      rt->cached_ip4_address = first_int_addr->as_u32;
+                      if (first_int_addr)
+                        rt->cached_ip4_address = first_int_addr->as_u32;
+                      else
+                        rt->cached_ip4_address = 0;
                     }
                   
                   /* Don't NAT packet aimed at the intfc address */
@@ -788,7 +794,10 @@ snat_in2out_node_fn_inline (vlib_main_t * vm,
                         ip4_interface_first_address (sm->ip4_main, sw_if_index1,
                                                      0 /* just want the address */);
                       rt->cached_sw_if_index = sw_if_index1;
-                      rt->cached_ip4_address = first_int_addr->as_u32;
+                      if (first_int_addr)
+                        rt->cached_ip4_address = first_int_addr->as_u32;
+                      else
+                        rt->cached_ip4_address = 0;
                     }
                   
                   /* Don't NAT packet aimed at the intfc address */
@@ -971,7 +980,10 @@ snat_in2out_node_fn_inline (vlib_main_t * vm,
                         ip4_interface_first_address (sm->ip4_main, sw_if_index0,
                                                      0 /* just want the address */);
                       rt->cached_sw_if_index = sw_if_index0;
-                      rt->cached_ip4_address = first_int_addr->as_u32;
+                      if (first_int_addr)
+                        rt->cached_ip4_address = first_int_addr->as_u32;
+                      else
+                        rt->cached_ip4_address = 0;
                     }
                   
                   /* Don't NAT packet aimed at the intfc address */
@@ -1350,7 +1362,10 @@ static inline u32 icmp_in2out_static_map (snat_main_t *sm,
             ip4_interface_first_address (sm->ip4_main, sw_if_index0,
                                          0 /* just want the address */);
           rt->cached_sw_if_index = sw_if_index0;
-          rt->cached_ip4_address = first_int_addr->as_u32;
+          if (first_int_addr)
+            rt->cached_ip4_address = first_int_addr->as_u32;
+          else
+            rt->cached_ip4_address = 0;
         }
 
       /* Don't NAT packet aimed at the intfc address */
index 9e5a8af..0c9c9cd 100644 (file)
@@ -255,7 +255,10 @@ static inline u32 icmp_out2in_slow_path (snat_main_t *sm,
                 ip4_interface_first_address (sm->ip4_main, sw_if_index0,
                                              0 /* just want the address */);
               rt->cached_sw_if_index = sw_if_index0;
-              rt->cached_ip4_address = first_int_addr->as_u32;
+              if (first_int_addr)
+                rt->cached_ip4_address = first_int_addr->as_u32;
+              else
+                rt->cached_ip4_address = 0;
             }
           
           /* Don't NAT packet aimed at the intfc address */
@@ -1043,7 +1046,10 @@ static inline u32 icmp_out2in_fast (snat_main_t *sm,
             ip4_interface_first_address (sm->ip4_main, sw_if_index0,
                                          0 /* just want the address */);
           rt->cached_sw_if_index = sw_if_index0;
-          rt->cached_ip4_address = first_int_addr->as_u32;
+          if (first_int_addr)
+            rt->cached_ip4_address = first_int_addr->as_u32;
+          else
+            rt->cached_ip4_address = 0;
         }
 
       /* Don't NAT packet aimed at the intfc address */