mp_rpc_server.C: limit iteration of svc_fdset to FD_SETSIZE, as per spec.
authorJon Trulson <jon@radscan.com>
Mon, 10 Mar 2014 20:49:37 +0000 (14:49 -0600)
committerJon Trulson <jon@radscan.com>
Mon, 10 Mar 2014 20:49:37 +0000 (14:49 -0600)
In init() there was code iterating over all of the possible file
descriptors in a svc_fdset.  fdsets are limited to FD_SETSIZE.  This
caused coredumps on FreeBSD 10, and possibly other hidden issues.

Moving to poll(), rather than select() would be better, but is a bigger
job.  For now, just limit to the FD_SETSIZE that select() requires.

cde/lib/tt/slib/mp_rpc_server.C

index 8292c86f6b5bd60ae142223cdba0723279b90762..0bd690f11a25af041070701891cad42417a6b096 100644 (file)
@@ -244,8 +244,7 @@ init(void (*service_fn)(struct svc_req *, SVCXPRT *))
        (void)endnetconfig(handlep);
 #endif                         /* OPT_TLI */
        // now figure out what fd the rpc package is using
-       int maxfds = _tt_global->maxfds();
-       for (int i=0; i < maxfds; i++) {
+       for (int i=0; i < FD_SETSIZE; i++) {
                if (FD_ISSET(i, &svc_fdset)) {
                        _rpc_fd = i;
                }