From b0316cdb10fbd9eaca7ede28c7bb3eb19f7766bf Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Wed, 2 Jul 2014 08:53:34 -0500 Subject: 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 Test Plan: none Reviewers: austin, simonmar Reviewed By: austin, simonmar Subscribers: simonmar, relrod, carter Differential Revision: https://phabricator.haskell.org/D28 --- libraries/base/cbits/inputReady.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'libraries/base/cbits/inputReady.c') 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) { -- cgit v1.2.1