linux-cp: fix crash on failed vlib_buffer_copy 06/33606/7
authorPim van Pelt <pim@ipng.nl>
Thu, 26 Aug 2021 13:49:17 +0000 (15:49 +0200)
committerMatthew Smith <mgsmith@netgate.com>
Wed, 8 Sep 2021 22:08:28 +0000 (22:08 +0000)
Type: fix

Signed-off-by: Pim van Pelt <pim@ipng.nl>
Change-Id: I390282ecc63600728cf11413510c0169178e305c

src/plugins/linux-cp/lcp_node.c

index b2ffc5f..3a88c3b 100644 (file)
@@ -671,10 +671,14 @@ VLIB_NODE_FN (lcp_arp_phy_node)
                  c0 = vlib_buffer_copy (vm, b0);
                  vlib_buffer_advance (b0, len0);
 
-                 /* Send to the host */
-                 vnet_buffer (c0)->sw_if_index[VLIB_TX] =
-                   lip0->lip_host_sw_if_index;
-                 reply_copies[n_copies++] = vlib_get_buffer_index (vm, c0);
+                 if (c0)
+                   {
+                     /* Send to the host */
+                     vnet_buffer (c0)->sw_if_index[VLIB_TX] =
+                       lip0->lip_host_sw_if_index;
+                     reply_copies[n_copies++] =
+                       vlib_get_buffer_index (vm, c0);
+                   }
                }
            }
          if (arp1->opcode == clib_host_to_net_u16 (ETHERNET_ARP_OPCODE_reply))
@@ -699,10 +703,14 @@ VLIB_NODE_FN (lcp_arp_phy_node)
                  c1 = vlib_buffer_copy (vm, b1);
                  vlib_buffer_advance (b1, len1);
 
-                 /* Send to the host */
-                 vnet_buffer (c1)->sw_if_index[VLIB_TX] =
-                   lip1->lip_host_sw_if_index;
-                 reply_copies[n_copies++] = vlib_get_buffer_index (vm, c1);
+                 if (c1)
+                   {
+                     /* Send to the host */
+                     vnet_buffer (c1)->sw_if_index[VLIB_TX] =
+                       lip1->lip_host_sw_if_index;
+                     reply_copies[n_copies++] =
+                       vlib_get_buffer_index (vm, c1);
+                   }
                }
            }
 
@@ -771,10 +779,14 @@ VLIB_NODE_FN (lcp_arp_phy_node)
                  c0 = vlib_buffer_copy (vm, b0);
                  vlib_buffer_advance (b0, len0);
 
-                 /* Send to the host */
-                 vnet_buffer (c0)->sw_if_index[VLIB_TX] =
-                   lip0->lip_host_sw_if_index;
-                 reply_copies[n_copies++] = vlib_get_buffer_index (vm, c0);
+                 if (c0)
+                   {
+                     /* Send to the host */
+                     vnet_buffer (c0)->sw_if_index[VLIB_TX] =
+                       lip0->lip_host_sw_if_index;
+                     reply_copies[n_copies++] =
+                       vlib_get_buffer_index (vm, c0);
+                   }
                }
            }