summaryrefslogtreecommitdiff
path: root/libraries/base/cbits/inputReady.c
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2014-07-02 08:53:34 -0500
committerAustin Seipp <austin@well-typed.com>2014-07-02 08:53:34 -0500
commitb0316cdb10fbd9eaca7ede28c7bb3eb19f7766bf (patch)
tree93cf400ff2d12f8635bddcd10b2b9797c0fae8a6 /libraries/base/cbits/inputReady.c
parent34f7e9a3c99850859901ca74370f55f1d4e2279a (diff)
downloadhaskell-b0316cdb10fbd9eaca7ede28c7bb3eb19f7766bf.tar.gz
reading/writing blocking FDs over FD_SETSIZE is broken (Partially Trac #9169)
Summary: libraries/base/cbits/inputReady.c had no limits on file descriptors. Add a limit as non-threaded RTS does. Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org> Test Plan: none Reviewers: austin, simonmar Reviewed By: austin, simonmar Subscribers: simonmar, relrod, carter Differential Revision: https://phabricator.haskell.org/D28
Diffstat (limited to 'libraries/base/cbits/inputReady.c')
-rw-r--r--libraries/base/cbits/inputReady.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libraries/base/cbits/inputReady.c b/libraries/base/cbits/inputReady.c
index 51f278feb1..dac9d9b524 100644
--- a/libraries/base/cbits/inputReady.c
+++ b/libraries/base/cbits/inputReady.c
@@ -25,7 +25,11 @@ fdReady(int fd, int write, int msecs, int isSock)
int maxfd, ready;
fd_set rfd, wfd;
struct timeval tv;
-
+ if ((fd >= (int)FD_SETSIZE) || (fd < 0)) {
+ /* avoid memory corruption on too large FDs */
+ errno = EINVAL;
+ return -1;
+ }
FD_ZERO(&rfd);
FD_ZERO(&wfd);
if (write) {