[openssh-commits] [openssh] 03/03: Only return events from ppoll that were requested.
git+noreply at mindrot.org
git+noreply at mindrot.org
Fri Apr 1 23:59:54 AEDT 2022
This is an automated email from the git hooks/post-receive script.
dtucker pushed a commit to branch master
in repository openssh.
commit 90452c8b69d065b7c7c285ff78b81418a75bcd76
Author: Darren Tucker <dtucker at dtucker.net>
Date: Fri Apr 1 23:38:44 2022 +1100
Only return events from ppoll that were requested.
If the underlying system's select() returns bits that were not in the
request set, our ppoll() implementation can return revents for events
not requested, which can apparently cause a hang. Only return revents
for activity in the requested event set. bz#3416, analysis and fix by
yaroslav.kuzmin at vmssoftware com, ok djm@
---
openbsd-compat/bsd-poll.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/openbsd-compat/bsd-poll.c b/openbsd-compat/bsd-poll.c
index 781ee978..9a9794f5 100644
--- a/openbsd-compat/bsd-poll.c
+++ b/openbsd-compat/bsd-poll.c
@@ -91,11 +91,11 @@ ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *tmoutp,
fds[i].revents = 0;
if (fd == -1)
continue;
- if (FD_ISSET(fd, readfds))
+ if ((fds[i].events & POLLIN) && FD_ISSET(fd, readfds))
fds[i].revents |= POLLIN;
- if (FD_ISSET(fd, writefds))
+ if ((fds[i].events & POLLOUT) && FD_ISSET(fd, writefds))
fds[i].revents |= POLLOUT;
- if (FD_ISSET(fd, exceptfds))
+ if ((fds[i].events & POLLPRI) && FD_ISSET(fd, exceptfds))
fds[i].revents |= POLLPRI;
}
--
To stop receiving notification emails like this one, please contact
djm at mindrot.org.
More information about the openssh-commits
mailing list