punt: fix tracing for partially traced chains 82/9282/4
authorKlement Sekera <ksekera@cisco.com>
Wed, 8 Nov 2017 03:13:49 +0000 (04:13 +0100)
committerNeale Ranns <nranns@cisco.com>
Fri, 8 Dec 2017 13:56:03 +0000 (13:56 +0000)
This fixes a crash if the first buffer in buffer chain is not traced,
but some other buffer (mid-chain) is.

Change-Id: I2c9f529ae0bc3263d20981e0cb83ce24ed292bd8
Signed-off-by: Klement Sekera <ksekera@cisco.com>
src/vnet/ip/punt.c

index 6a8f451..db3ea33 100644 (file)
@@ -360,10 +360,7 @@ udp46_punt_socket_inline (vlib_main_t * vm,
       punt_client_t *c = NULL;
       if (PREDICT_FALSE (b->flags & VLIB_BUFFER_IS_TRACED))
        {
-         if (!c)
-           {
-             c = punt_client_get (is_ip4, port);
-           }
+         c = punt_client_get (is_ip4, port);
          udp_punt_trace_t *t;
          t = vlib_add_trace (vm, node, b, sizeof (t[0]));
          clib_memcpy (&t->client, c, sizeof (t->client));
@@ -393,6 +390,10 @@ udp46_punt_socket_inline (vlib_main_t * vm,
              b = vlib_get_buffer (vm, b->next_buffer);
              if (PREDICT_FALSE (b->flags & VLIB_BUFFER_IS_TRACED))
                {
+                 if (PREDICT_FALSE (!c))
+                   {
+                     c = punt_client_get (is_ip4, port);
+                   }
                  udp_punt_trace_t *t;
                  t = vlib_add_trace (vm, node, b, sizeof (t[0]));
                  clib_memcpy (&t->client, c, sizeof (t->client));