From: Viktor Dukhovni Date: Tue, 25 Jun 2013 16:27:42 +0000 (-0400) Subject: Fix spin loop reading from KDC TCP socket X-Git-Tag: krb5-1.12-alpha1~127 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53e5c850e05f011e9e7f25c2032aec51d8b352a9;p=thirdparty%2Fkrb5.git 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 3e4ec7e9b4..3c31d9f55d 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->addr, e); - e = SOCKET_ERRNO; goto kill_conn; } conn->x.in.bufsizebytes_read += nread;