sctp chunk_len fix 77/18077/2
authorSirshak das <sirshak.das@arm.com>
Wed, 6 Mar 2019 14:51:02 +0000 (09:51 -0500)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 6 Mar 2019 18:57:23 +0000 (18:57 +0000)
total_length_not_including_first_buffer should only be used when
VLIB_BUFFER_TOTAL_LENGTH_VALID is set, if not it uses stale data
from previous session_chain_tail calculation to set data/chunk len.

Change-Id: I9802341e522cf9b18d0aef817f0047b76945782e
Signed-off-by: Sirshak Das <sirshak.das@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
src/vnet/sctp/sctp_output.c

index 8863012..e76f67b 100644 (file)
@@ -1334,8 +1334,10 @@ static void
 sctp_push_hdr_i (sctp_connection_t * sctp_conn, vlib_buffer_t * b,
                 sctp_state_t next_state)
 {
-  u16 data_len =
-    b->current_length + b->total_length_not_including_first_buffer;
+  u16 data_len = b->current_length;
+
+  if (b->flags & VLIB_BUFFER_TOTAL_LENGTH_VALID)
+    data_len += b->total_length_not_including_first_buffer;
 
   ASSERT (!b->total_length_not_including_first_buffer
          || (b->flags & VLIB_BUFFER_NEXT_PRESENT));