]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BFD: Fix invalid read from pollfd array
authorPavel Tvrdik <pawel.tvrdik@gmail.com>
Thu, 8 Sep 2016 11:45:36 +0000 (13:45 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 15 Sep 2016 14:18:32 +0000 (16:18 +0200)
It is possible that sockets_add() are called between sockets_prepare()
and sockets_fire() during poll loop in birdloop_main(), so we need to
use loop->poll_fd.used instead of loop->sock_num to find the last field.

proto/bfd/io.c

index 79ed9af71e03e793921123af5d7309f9780bf992..8f4f50074c4d1248a7540ec87b2e912567629511 100644 (file)
@@ -589,7 +589,7 @@ sockets_fire(struct birdloop *loop)
   times_update(loop);
 
   /* Last fd is internal wakeup fd */
-  if (pfd[loop->sock_num].revents & POLLIN)
+  if (pfd[poll_num].revents & POLLIN)
     wakeup_drain(loop);
 
   int i;