buffers: protect against bad thread indices 27/36427/2
authorJon Loeliger <jdl@netgate.com>
Mon, 13 Jun 2022 15:39:32 +0000 (10:39 -0500)
committerMatthew Smith <mgsmith@netgate.com>
Fri, 1 Jul 2022 14:11:10 +0000 (14:11 +0000)
There is a very rare bug in NAT processing that yeilds a thread
index of ~0.  When this happens, vlib_get_frame_queue_elt()
suffers a segfault and VPP quits.  Prevent an outright fault
by dropping the packet instead.

Type: fix
Signed-off-by: Jon Loeliger <jdl@netgate.com>
Change-Id: I48c7a268925bb821ea15e58db5d4bfb211c40c09

src/vlib/buffer_funcs.c

index 4e1f2fd..80bb30e 100644 (file)
@@ -261,6 +261,9 @@ vlib_get_frame_queue_elt (vlib_frame_queue_main_t *fqm, u32 index,
   vlib_frame_queue_t *fq;
   u64 nelts, tail, new_tail;
 
+  if (index >= vec_len (fqm->vlib_frame_queues))
+    return 0;
+
   fq = fqm->vlib_frame_queues[index];
   ASSERT (fq);
   nelts = fq->nelts;