misc: check return values from vlib_buffer_copy(...)
[vpp.git] / src / plugins / dhcp / dhcp6_proxy_node.c
index 929b49e..95e5c92 100644 (file)
@@ -315,8 +315,9 @@ dhcpv6_proxy_to_server_input (vlib_main_t * vm,
 
        link_address_set:
 
-         if ((b0->current_length + sizeof (*id1) + sizeof (*vss1) +
-              sizeof (*cmac)) > vlib_buffer_get_default_data_size (vm))
+         if ((b0->current_data + b0->current_length + sizeof (*id1) +
+              sizeof (*vss1) + sizeof (*cmac)) >
+             vlib_buffer_get_default_data_size (vm))
            {
              error0 = DHCPV6_PROXY_ERROR_PKT_TOO_BIG;
              next0 = DHCPV6_PROXY_TO_SERVER_INPUT_NEXT_DROP;
@@ -436,6 +437,13 @@ dhcpv6_proxy_to_server_input (vlib_main_t * vm,
                  u32 ci0;
 
                  c0 = vlib_buffer_copy (vm, b0);
+                 if (c0 == NULL)
+                   {
+                     vlib_node_increment_counter
+                       (vm, dhcpv6_proxy_to_server_node.index,
+                        DHCPV6_PROXY_ERROR_ALLOC_FAIL, 1);
+                     continue;
+                   }
                  VLIB_BUFFER_TRACE_TRAJECTORY_INIT (c0);
                  ci0 = vlib_get_buffer_index (vm, c0);
                  server = &proxy->dhcp_servers[ii];