Tweaked for 1.11.3. commit 53e5c850e05f011e9e7f25c2032aec51d8b352a9 Author: Viktor Dukhovni Date: Tue Jun 25 12:27:42 2013 -0400 Fix spin loop reading from KDC TCP socket In the k5_sendto code for reading from a TCP socket, detect end-of-stream when reading the length. Otherwise we can get stuck in an infinite loop of poll() and read(). [ghudson@mit.edu: commit message] ticket: 7508 target_version: 1.11.4 tags: pullup diff --git a/src/lib/krb5/os/sendto_kdc.c b/src/lib/krb5/os/sendto_kdc.c index 3e4ec7e..3c31d9f 100644 --- a/src/lib/krb5/os/sendto_kdc.c +++ b/src/lib/krb5/os/sendto_kdc.c @@ -853,9 +853,9 @@ service_tcp_fd(krb5_context context, struct conn_state *conn, nread = SOCKET_READ(conn->fd, conn->x.in.bufsizebytes + conn->x.in.bufsizebytes_read, 4 - conn->x.in.bufsizebytes_read); - if (nread < 0) { + if (nread <= 0) { + e = nread ? SOCKET_ERRNO : ECONNRESET; TRACE_SENDTO_KDC_TCP_ERROR_RECV_LEN(context, conn, e); - e = SOCKET_ERRNO; goto kill_conn; } conn->x.in.bufsizebytes_read += nread;