When poll(2) returns -1, for some error conditions pfd[].revents is
authorderaadt <deraadt@openbsd.org>
Fri, 21 Jan 2022 00:53:40 +0000 (00:53 +0000)
committerderaadt <deraadt@openbsd.org>
Fri, 21 Jan 2022 00:53:40 +0000 (00:53 +0000)
not cleared.  There are subtle errors in various programs.
In this particular case, the program should error out.
ok djm millert

usr.bin/ssh/ssh-keyscan.c

index 356467d..1b75bbe 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keyscan.c,v 1.144 2021/12/02 23:45:36 djm Exp $ */
+/* $OpenBSD: ssh-keyscan.c,v 1.145 2022/01/21 00:53:40 deraadt Exp $ */
 /*
  * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>.
  *
@@ -572,9 +572,11 @@ conloop(void)
        else
                timespecclear(&seltime);
 
-       while (ppoll(read_wait, maxfd, &seltime, NULL) == -1 &&
-           (errno == EAGAIN || errno == EINTR))
-               ;
+       while (ppoll(read_wait, maxfd, &seltime, NULL) == -1) {
+               if (errno == EAGAIN || errno == EINTR)
+                       continue;
+               error("poll error");
+       }
 
        for (i = 0; i < maxfd; i++) {
                if (read_wait[i].revents & (POLLHUP|POLLERR|POLLNVAL))