aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathaniel McCallum <npmccallum@redhat.com>2016-06-21 16:12:36 -0400
committerTom Yu <tlyu@mit.edu>2016-07-06 16:09:30 -0400
commit5b8dab42d541d2600c76647dedf56251f7f9da33 (patch)
tree2db1579736575443d6fe4557618ae0c4c05e3d19
parent736521cfa04cf30ab7a6d57a75b267eed90a6593 (diff)
downloadkrb5-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.c4
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)