error in socket number range check in kdc
authorKen Raeburn <raeburn@mit.edu>
Tue, 5 Aug 2008 22:15:34 +0000 (22:15 +0000)
committerKen Raeburn <raeburn@mit.edu>
Tue, 5 Aug 2008 22:15:34 +0000 (22:15 +0000)
Fix off-by-one error in checking that socket file descriptor numbers
are in range suitable for an fd_set.  Also, don't do the check if we
should someday happen to get compiled on Windows.

ticket: new
target_version: 1.6.4
tags: pullup

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20606 dc483132-0cff-0310-8789-dd5450dbe970

src/kdc/network.c

index 0cc6737223976e81409efbfb5c3ef00032361fbc..3bad9650c423abaae9fa62239e3668da6df92858 100644 (file)
@@ -322,12 +322,14 @@ add_fd (struct socksetup *data, int sock, enum kdc_conn_type conntype,
     struct connection *newconn;
     void *tmp;
 
-    if (sock > FD_SETSIZE) {
+#ifndef _WIN32
+    if (sock >= FD_SETSIZE) {
        data->retval = EMFILE;  /* XXX */
        com_err(data->prog, 0,
                "file descriptor number %d too high", sock);
        return 0;
     }
+#endif
     newconn = malloc(sizeof(*newconn));
     if (newconn == 0) {
        data->retval = ENOMEM;
@@ -420,12 +422,14 @@ setup_a_tcp_listener(struct socksetup *data, struct sockaddr *addr)
        return -1;
     }
     set_cloexec_fd(sock);
-    if (sock > FD_SETSIZE) {
+#ifndef _WIN32
+    if (sock >= FD_SETSIZE) {
        close(sock);
        com_err(data->prog, 0, "TCP socket fd number %d (for %s) too high",
                sock, paddr(addr));
        return -1;
     }
+#endif
     if (setreuseaddr(sock, 1) < 0)
        com_err(data->prog, errno,
                "Cannot enable SO_REUSEADDR on fd %d", sock);
@@ -1246,10 +1250,12 @@ static void accept_tcp_connection(struct connection *conn, const char *prog,
     if (s < 0)
        return;
     set_cloexec_fd(s);
-    if (s > FD_SETSIZE) {
+#ifndef _WIN32
+    if (s >= FD_SETSIZE) {
        close(s);
        return;
     }
+#endif
     setnbio(s), setnolinger(s), setkeepalive(s);
 
     sockdata.prog = prog;