From: Jim Rees Date: Fri, 31 Jan 2003 21:20:25 +0000 (+0000) Subject: STABLE12-fix-netreceive-memleak-20030130 X-Git-Tag: openafs-stable-1_2_9~65 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=bf769f55858698bfd120f3db3149756950c23a00;p=packages%2Fo%2Fopenafs.git STABLE12-fix-netreceive-memleak-20030130 for darwin and freebsd, simplified for pullup (cherry picked from commit 530c491c673154c5c935bd339c6d00850d454190) --- diff --git a/src/rx/DARWIN/rx_knet.c b/src/rx/DARWIN/rx_knet.c index f069eed1c..87549ff12 100644 --- a/src/rx/DARWIN/rx_knet.c +++ b/src/rx/DARWIN/rx_knet.c @@ -24,7 +24,7 @@ int osi_NetReceive(asocket, addr, dvec, nvecs, alength) struct uio u; int i; struct iovec iov[RX_MAXIOVECS]; - struct sockaddr *sa; + struct sockaddr *sa = NULL; int code; int haveGlock = ISAFS_GLOCK(); @@ -60,13 +60,16 @@ int osi_NetReceive(asocket, addr, dvec, nvecs, alength) if (haveGlock) { AFS_GLOCK(); } - *alength=*alength-u.uio_resid; + if (code) + return code; + *alength -= u.uio_resid; if (sa) { if (sa->sa_family == AF_INET) { if (addr) *addr=*(struct sockaddr_in *)sa; } else { printf("Unknown socket family %d in NetReceive\n"); } + FREE(sa, M_SONAME); } return code; } diff --git a/src/rx/FBSD/rx_knet.c b/src/rx/FBSD/rx_knet.c index 6a736e2af..fc50c34af 100644 --- a/src/rx/FBSD/rx_knet.c +++ b/src/rx/FBSD/rx_knet.c @@ -26,6 +26,7 @@ RCSID("$Header$"); #ifdef AFS_FBSD40_ENV +#include #include "../rx/rx_kcommon.h" @@ -37,7 +38,7 @@ int osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec, struct uio u; int i; struct iovec iov[RX_MAXIOVECS]; - struct sockaddr *sa; + struct sockaddr *sa = NULL; int code; int haveGlock = ISAFS_GLOCK(); @@ -75,13 +76,16 @@ int osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec, if (haveGlock) { AFS_GLOCK(); } - *alength=*alength-u.uio_resid; + if (code) + return code; + *alength -= u.uio_resid; if (sa) { if (sa->sa_family == AF_INET) { if (addr) *addr=*(struct sockaddr_in *)sa; } else { printf("Unknown socket family %d in NetReceive\n", sa->sa_family); } + FREE(sa, M_SONAME); } return code; } @@ -141,7 +145,8 @@ osi_NetSend(asocket, addr, dvec, nvecs, alength, istack) #if KNET_DEBUG printf("+"); #endif - code = sosend(asocket, addr, &u, NULL, NULL, 0, curproc); + code = sosend(asocket, (struct sockaddr *)addr, &u, NULL, NULL, 0, + curproc); #if KNET_DEBUG if (code) { if (code == EINVAL)