diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2014-07-02 08:53:34 -0500 |
---|---|---|
committer | Austin Seipp <austin@well-typed.com> | 2014-07-02 08:53:34 -0500 |
commit | b0316cdb10fbd9eaca7ede28c7bb3eb19f7766bf (patch) | |
tree | 93cf400ff2d12f8635bddcd10b2b9797c0fae8a6 /libraries/base/cbits/inputReady.c | |
parent | 34f7e9a3c99850859901ca74370f55f1d4e2279a (diff) | |
download | haskell-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.c | 6 |
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) { |