diff options
author | Florin Coras <fcoras@cisco.com> | 2023-02-14 19:12:30 -0800 |
---|---|---|
committer | Dave Barach <vpp@barachs.net> | 2023-02-16 01:51:55 +0000 |
commit | 5b704f4fa1280b5603ed1cbf8ae9be4b2b1cb016 (patch) | |
tree | eb758120b95ab0b4338d27fc82cd3d5d67ee25b4 /src | |
parent | 7d7ab1008a0f13a464e7f4c3628b48832172d0b3 (diff) |
session: ignore zero length dgrams
Type: fix
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I70596ffcf90fa4cd57092584cb7a454f44208943
Diffstat (limited to 'src')
-rw-r--r-- | src/vnet/session/session_node.c | 10 |
1 files changed, 9 insertions, 1 deletions
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; } |