Avoid overflowing FDSET when using select(2).
authorPauli <paul.dale@oracle.com>
Sat, 24 Aug 2019 06:13:24 +0000 (16:13 +1000)
committerPauli <paul.dale@oracle.com>
Sat, 24 Aug 2019 06:40:34 +0000 (16:40 +1000)
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)

crypto/rand/rand_unix.c

index 0ca66e41ffca60c237115c32fd0075725169ab89..7e20fa29c668344bc3000b3c03070b62f5ee6585 100644 (file)
@@ -390,7 +390,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