From 883683fc317c5196f2eea1c1baed3b510771f001 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 25 Sep 2008 18:06:24 +0000 Subject: [PATCH] rx-readproc32-avoid-losing-currentpacket-20080925 LICENSE IPL10 when currentPacket is empty, avoid leaking it and instead free and NULL it --- src/rx/rx_rdwr.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/rx/rx_rdwr.c b/src/rx/rx_rdwr.c index a5700e9..5baff8a 100644 --- a/src/rx/rx_rdwr.c +++ b/src/rx/rx_rdwr.c @@ -325,6 +325,16 @@ rx_ReadProc(struct rx_call *call, char *buf, int nbytes) call->curpos = tcurpos + nbytes; call->curlen = tcurlen - nbytes; call->nLeft = tnLeft - nbytes; + + if (!call->nLeft) { + /* out of packet. Get another one. */ + NETPRI; + MUTEX_ENTER(&call->lock); + rxi_FreePacket(call->currentPacket); + call->currentPacket = (struct rx_packet *)0; + MUTEX_EXIT(&call->lock); + USERPRI; + } return nbytes; } @@ -373,6 +383,15 @@ rx_ReadProc32(struct rx_call *call, afs_int32 * value) call->curpos = tcurpos + sizeof(afs_int32); call->curlen = (u_short)(tcurlen - sizeof(afs_int32)); call->nLeft = (u_short)(tnLeft - sizeof(afs_int32)); + if (!call->nLeft) { + /* out of packet. Get another one. */ + NETPRI; + MUTEX_ENTER(&call->lock); + rxi_FreePacket(call->currentPacket); + call->currentPacket = (struct rx_packet *)0; + MUTEX_EXIT(&call->lock); + USERPRI; + } return sizeof(afs_int32); } -- 1.9.4