From: Simon Wilkinson Date: Fri, 30 Mar 2012 18:37:36 +0000 (+0100) Subject: rx: Handle negative returns on packet reads X-Git-Tag: openafs-stable-1_8_0pre1~2605 X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=438d6ba63cda7d7484c545a4fd181803e84d68eb rx: Handle negative returns on packet reads rxi_RecvMsg returns an int, because it can return a negative value upon error. Don't store its return value as an unsigned int, because this may hide the potential errors. Modify the error handling loop so that errors get to where they are intended. Change-Id: I212e5881f83a2a95c177c23dbc2da2583155f1aa Reviewed-on: http://gerrit.openafs.org/7087 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/src/rx/rx_packet.c b/src/rx/rx_packet.c index 0f0513d..78d2e5e 100644 --- a/src/rx/rx_packet.c +++ b/src/rx/rx_packet.c @@ -1407,7 +1407,7 @@ rxi_ReadPacket(osi_socket socket, struct rx_packet *p, afs_uint32 * host, u_short * port) { struct sockaddr_in from; - unsigned int nbytes; + int nbytes; afs_int32 rlen; afs_uint32 tlen, savelen; struct msghdr msg; @@ -1446,7 +1446,7 @@ rxi_ReadPacket(osi_socket socket, struct rx_packet *p, afs_uint32 * host, p->wirevec[p->niovecs - 1].iov_len = savelen; p->length = (u_short)(nbytes - RX_HEADER_SIZE); - if ((nbytes > tlen) || (p->length & 0x8000)) { /* Bogus packet */ + if (nbytes < 0 || (nbytes > tlen) || (p->length & 0x8000)) { /* Bogus packet */ if (nbytes < 0 && errno == EWOULDBLOCK) { if (rx_stats_active) rx_atomic_inc(&rx_stats.noPacketOnRead);