aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2007-10-18 00:14:01 +0000
committerKen Raeburn <raeburn@mit.edu>2007-10-18 00:14:01 +0000
commitca917d8b2a542bc8c06fc4d31c7fad7218063518 (patch)
tree0f11e375a71b25da1f99d7f17f49aeb876fc5f59
parent04f249474512f9bba2c35fa156beb2e029b43e61 (diff)
downloadkrb5-ca917d8b2a542bc8c06fc4d31c7fad7218063518.zip
krb5-ca917d8b2a542bc8c06fc4d31c7fad7218063518.tar.gz
krb5-ca917d8b2a542bc8c06fc4d31c7fad7218063518.tar.bz2
Reject socket fds > FD_SETSIZE
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20127 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/kdc/network.c16
-rw-r--r--src/lib/krb5/os/sendto_kdc.c6
2 files changed, 22 insertions, 0 deletions
diff --git a/src/kdc/network.c b/src/kdc/network.c
index 86fa6c0..dc21e1d 100644
--- a/src/kdc/network.c
+++ b/src/kdc/network.c
@@ -312,6 +312,12 @@ add_fd (struct socksetup *data, int sock, enum kdc_conn_type conntype,
struct connection *newconn;
void *tmp;
+ if (sock > FD_SETSIZE) {
+ data->retval = EMFILE; /* XXX */
+ com_err(data->prog, 0,
+ "file descriptor number %d too high", sock);
+ return 0;
+ }
newconn = malloc(sizeof(*newconn));
if (newconn == 0) {
data->retval = errno;
@@ -396,6 +402,12 @@ setup_a_tcp_listener(struct socksetup *data, struct sockaddr *addr)
paddr(addr));
return -1;
}
+ 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;
+ }
if (setreuseaddr(sock, 1) < 0)
com_err(data->prog, errno,
"Cannot enable SO_REUSEADDR on fd %d", sock);
@@ -1098,6 +1110,10 @@ static void accept_tcp_connection(struct connection *conn, const char *prog,
s = accept(conn->fd, addr, &addrlen);
if (s < 0)
return;
+ if (s > FD_SETSIZE) {
+ close(s);
+ return;
+ }
setnbio(s), setnolinger(s);
sockdata.prog = prog;
diff --git a/src/lib/krb5/os/sendto_kdc.c b/src/lib/krb5/os/sendto_kdc.c
index 0c63b22..9992747 100644
--- a/src/lib/krb5/os/sendto_kdc.c
+++ b/src/lib/krb5/os/sendto_kdc.c
@@ -671,6 +671,12 @@ start_connection (struct conn_state *state,
dprint("socket: %m creating with af %d\n", state->err, ai->ai_family);
return -1; /* try other hosts */
}
+ if (fd > FD_SETSIZE) {
+ close(fd);
+ state->err = EMFILE;
+ dprint("socket: fd %d too high\n", fd);
+ return -1;
+ }
/* Make it non-blocking. */
if (ai->ai_socktype == SOCK_STREAM) {
static const int one = 1;