summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPauli <paul.dale@oracle.com>2019-08-24 16:13:24 +1000
committerPauli <paul.dale@oracle.com>2019-08-24 16:45:53 +1000
commit4bdab2571782393e4ba3acb8578c415ce1575a75 (patch)
tree3eca3b712cfd91c282485e979f3e1f0343522c94
parent738da3d0b8c63994e77d22457f8479c23e08b361 (diff)
Avoid overflowing FDSET when using select(2).
There is a problem in the rand_unix.c code when the random seed fd is greater than or equal to FD_SETSIZE and the FDSET overruns its limit and walks the stack. Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de> (Merged from https://github.com/openssl/openssl/pull/9686) (cherry picked from commit e1f8584d47a499301fba781086af6885fcf21fec)
-rw-r--r--crypto/rand/rand_unix.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/crypto/rand/rand_unix.c b/crypto/rand/rand_unix.c
index 0d449d235a..258fef7eb0 100644
--- a/crypto/rand/rand_unix.c
+++ b/crypto/rand/rand_unix.c
@@ -411,7 +411,7 @@ static int wait_random_seeded(void)
}
/* Open /dev/random and wait for it to be readable */
if ((fd = open(DEVRANDOM_WAIT, O_RDONLY)) != -1) {
- if (DEVRANDM_WAIT_USE_SELECT) {
+ if (DEVRANDM_WAIT_USE_SELECT && fd < FD_SETSIZE) {
FD_ZERO(&fds);
FD_SET(fd, &fds);
while ((r = select(fd + 1, &fds, NULL, NULL, NULL)) < 0