From 5b704f4fa1280b5603ed1cbf8ae9be4b2b1cb016 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Tue, 14 Feb 2023 19:12:30 -0800 Subject: [PATCH] session: ignore zero length dgrams Type: fix Signed-off-by: Florin Coras Change-Id: I70596ffcf90fa4cd57092584cb7a454f44208943 --- src/vnet/session/session_node.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index 7a630715591..c67d63fea80 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -1226,6 +1226,13 @@ session_tx_set_dequeue_params (vlib_main_t * vm, session_tx_context_t * ctx, svm_fifo_peek (ctx->s->tx_fifo, 0, sizeof (ctx->hdr), (u8 *) & ctx->hdr); + /* Zero length dgrams not supported */ + if (PREDICT_FALSE (ctx->hdr.data_length == 0)) + { + svm_fifo_dequeue_drop (ctx->s->tx_fifo, sizeof (ctx->hdr)); + ctx->max_len_to_snd = 0; + return; + } ASSERT (ctx->hdr.data_length > ctx->hdr.data_offset); len = ctx->hdr.data_length - ctx->hdr.data_offset; @@ -1253,12 +1260,13 @@ session_tx_set_dequeue_params (vlib_main_t * vm, session_tx_context_t * ctx, { svm_fifo_peek (ctx->s->tx_fifo, offset, sizeof (ctx->hdr), (u8 *) & hdr); - ASSERT (hdr.data_length > hdr.data_offset); dgram_len = hdr.data_length - hdr.data_offset; if (offset + sizeof (hdr) + hdr.data_length > ctx->max_dequeue || first_dgram_len != dgram_len) break; + /* Assert here to allow test above with zero length dgrams */ + ASSERT (hdr.data_length > hdr.data_offset); len += dgram_len; offset += sizeof (hdr) + hdr.data_length; } -- 2.16.6