diff options
author | Nathaniel McCallum <npmccallum@redhat.com> | 2016-06-21 16:12:36 -0400 |
---|---|---|
committer | Tom Yu <tlyu@mit.edu> | 2016-07-06 16:09:30 -0400 |
commit | 5b8dab42d541d2600c76647dedf56251f7f9da33 (patch) | |
tree | 2db1579736575443d6fe4557618ae0c4c05e3d19 | |
parent | 736521cfa04cf30ab7a6d57a75b267eed90a6593 (diff) | |
download | krb5-5b8dab42d541d2600c76647dedf56251f7f9da33.zip krb5-5b8dab42d541d2600c76647dedf56251f7f9da33.tar.gz krb5-5b8dab42d541d2600c76647dedf56251f7f9da33.tar.bz2 |
Fix incorrect recv() size calculation in libkrad
Before this patch libkrad would always subtract the existing buffer
length from pktlen before passing it to recv(). In the case of stream
sockets, this is incorrect since krad_packet_bytes_needed() already
performs this calculation. Subtracting the buffer length twice could
cause integer underflow on the len parameter to recv().
(cherry picked from commit c969e8a37617e9c7743a28177dd3808f7d08cee9)
ticket: 8430
version_fixed: 1.13.6
tags: -pullup
status: resolved
-rw-r--r-- | src/lib/krad/remote.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lib/krad/remote.c b/src/lib/krad/remote.c index aaabffd..df3de3a 100644 --- a/src/lib/krad/remote.c +++ b/src/lib/krad/remote.c @@ -315,7 +315,7 @@ on_io_read(krad_remote *rr) request *tmp, *r; int i; - pktlen = sizeof(rr->buffer_); + pktlen = sizeof(rr->buffer_) - rr->buffer.length; if (rr->info->ai_socktype == SOCK_STREAM) { pktlen = krad_packet_bytes_needed(&rr->buffer); if (pktlen < 0) { @@ -328,7 +328,7 @@ on_io_read(krad_remote *rr) /* Read the packet. */ i = recv(verto_get_fd(rr->io), rr->buffer.data + rr->buffer.length, - pktlen - rr->buffer.length, 0); + pktlen, 0); if (i < 0) { /* Should we try again? */ if (errno == EWOULDBLOCK || errno == EAGAIN || errno == EINTR) |