vcl: fix ldp epoll events array overrun 84/39384/3
authorFlorin Coras <fcoras@cisco.com>
Tue, 15 Aug 2023 19:11:50 +0000 (12:11 -0700)
committerDave Barach <vpp@barachs.net>
Tue, 15 Aug 2023 20:58:35 +0000 (20:58 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I3dd65946c220f958a4fda0551b053d690bf06c39

src/vcl/ldp.c

index cc281b0..79e7cf3 100644 (file)
@@ -2681,6 +2681,7 @@ ldp_epoll_pwait_eventfd (int epfd, struct epoll_event *events,
       timeout = 0;
       if (rv >= maxevents)
        goto done;
+      maxevents -= rv;
     }
   else if (PREDICT_FALSE (rv < 0))
     {
@@ -2693,7 +2694,7 @@ epoll_again:
 
   libc_evts = &events[rv];
   libc_num_ev =
-    libc_epoll_pwait (libc_epfd, libc_evts, maxevents - rv, timeout, sigmask);
+    libc_epoll_pwait (libc_epfd, libc_evts, maxevents, timeout, sigmask);
   if (libc_num_ev <= 0)
     {
       rv = rv >= 0 ? rv : -1;