]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-rx-readproc32-avoid-losing-currentpacket-20080925
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 25 Sep 2008 18:06:57 +0000 (18:06 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 25 Sep 2008 18:06:57 +0000 (18:06 +0000)
LICENSE IPL10

when currentPacket is empty, avoid leaking it and instead free and NULL it

(cherry picked from commit 883683fc317c5196f2eea1c1baed3b510771f001)

src/rx/rx_rdwr.c

index eb5ab24b9e57cf24265715cd922fb4cbbbc2ca48..735e4da50514e1538e0732232b8c8066cfa29909 100644 (file)
@@ -323,6 +323,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;
     }
 
@@ -375,6 +385,15 @@ rx_ReadProc32(struct rx_call *call, afs_int32 * value)
        call->curpos = tcurpos + sizeof(afs_int32);
        call->curlen = tcurlen - sizeof(afs_int32);
        call->nLeft = 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);
     }