]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx: Zero unitialized uio structs
authorAndrew Deason <adeason@sinenomine.net>
Wed, 4 Feb 2015 16:25:38 +0000 (10:25 -0600)
committerStephan Wiesand <stephan.wiesand@desy.de>
Fri, 13 Feb 2015 17:33:35 +0000 (12:33 -0500)
We use some uio structures that were allocated on the stack, but we
only initialize them by initializing individual fields. On some
platforms (Solaris is one known example, but probably not the only
one), there are additional fields we do not initialize. Since we
cannot be certain of what any additional fields there may be, just
zero the whole thing.

This is basically the same change as
I0eae0b49a70aee19f3a9ec118b03cfb3a6bd03a3, but in the rx subtree.

Reviewed-on: http://gerrit.openafs.org/11711
Tested-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Perry Ruiter <pruiter@sinenomine.net>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Reviewed-by: Daria Brashear <shadow@your-file-system.com>
(cherry picked from commit a762e6871ad6837ee126cec9e63d99388b4bf119)

Change-Id: Ie6a2cce500d6a0a7a09c305296f4b34d122d3108
Reviewed-on: http://gerrit.openafs.org/11714
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Tested-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Perry Ruiter <pruiter@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
src/rx/DARWIN/rx_knet.c
src/rx/FBSD/rx_knet.c
src/rx/HPUX/rx_knet.c
src/rx/IRIX/rx_knet.c
src/rx/NBSD/rx_knet.c
src/rx/OBSD/rx_knet.c
src/rx/SOLARIS/rx_knet.c

index 9250df82f90e97087fcb861f365609f14e5d2ffa..f72c41ab1fbb2362287ed19e9f1b62122d0527ca 100644 (file)
@@ -165,6 +165,14 @@ int
 osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
               int nvecs, int *alength)
 {
+    int i;
+    struct iovec iov[RX_MAXIOVECS];
+    struct sockaddr *sa = NULL;
+    int code;
+    size_t resid;
+
+    int haveGlock = ISAFS_GLOCK();
+
 #ifdef AFS_DARWIN80_ENV
     socket_t asocket = (socket_t)so;
     struct msghdr msg;
@@ -174,14 +182,9 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
 #else
     struct socket *asocket = (struct socket *)so;
     struct uio u;
+    memset(&u, 0, sizeof(u));
 #endif
-    int i;
-    struct iovec iov[RX_MAXIOVECS];
-    struct sockaddr *sa = NULL;
-    int code;
-    size_t resid;
-
-    int haveGlock = ISAFS_GLOCK();
+    memset(&iov, 0, sizeof(iov));
     /*AFS_STATCNT(osi_NetReceive); */
 
     if (nvecs > RX_MAXIOVECS)
@@ -281,6 +284,10 @@ int
 osi_NetSend(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
            int nvecs, afs_int32 alength, int istack)
 {
+    afs_int32 code;
+    int i;
+    struct iovec iov[RX_MAXIOVECS];
+    int haveGlock = ISAFS_GLOCK();
 #ifdef AFS_DARWIN80_ENV
     socket_t asocket = (socket_t)so;
     struct msghdr msg;
@@ -288,11 +295,9 @@ osi_NetSend(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
 #else
     struct socket *asocket = (struct socket *)so;
     struct uio u;
+    memset(&u, 0, sizeof(u));
 #endif
-    afs_int32 code;
-    int i;
-    struct iovec iov[RX_MAXIOVECS];
-    int haveGlock = ISAFS_GLOCK();
+    memset(&iov, 0, sizeof(iov));
 
     AFS_STATCNT(osi_NetSend);
     if (nvecs > RX_MAXIOVECS)
index fef1d4f658e28105934c859df4f83a64e8ec5efb..1e8a013c984753a7c898538df3167f7cb3a2c737 100644 (file)
@@ -26,6 +26,10 @@ osi_NetReceive(osi_socket asocket, struct sockaddr_in *addr,
     int code;
 
     int haveGlock = ISAFS_GLOCK();
+
+    memset(&u, 0, sizeof(u));
+    memset(&iov, 0, sizeof(iov));
+
     /*AFS_STATCNT(osi_NetReceive); */
 
     if (nvecs > RX_MAXIOVECS)
@@ -137,6 +141,9 @@ osi_NetSend(osi_socket asocket, struct sockaddr_in *addr, struct iovec *dvec,
     struct uio u;
     int haveGlock = ISAFS_GLOCK();
 
+    memset(&u, 0, sizeof(u));
+    memset(&iov, 0, sizeof(iov));
+
     AFS_STATCNT(osi_NetSend);
     if (nvecs > RX_MAXIOVECS)
        osi_Panic("osi_NetSend: %d: Too many iovecs.\n", nvecs);
index c797cfd239044276293c32939496dee0e1a554c1..8ea0263cb401d72c8049ad7168ccc4ee32c5b5c5 100644 (file)
@@ -225,6 +225,9 @@ osi_NetSend(struct socket *asocket, struct sockaddr_in *addr,
     int code;
     int size = sizeof(struct sockaddr_in);
 
+    memset(&uio, 0, sizeof(uio));
+    memset(&temp, 0, sizeof(temp));
+
     /* Guess based on rxk_NewSocket */
     bp = allocb((size + SO_MSGOFFSET + 1), BPRI_MED);
     if (!bp)
@@ -258,6 +261,9 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
     int flags = 0;
     MBLKP bp, sp;
 
+    memset(&tuio, 0, sizeof(tuio));
+    memset(&tmpvec, 0, sizeof(tempvec));
+
     if (nvecs > RX_MAXWVECS + 2) {
        osi_Panic("Too many (%d) iovecs passed to osi_NetReceive\n", nvecs);
     }
index 421609d3378bf2cbe2739acdb936770034f02968..fe9e9c716705518890381cc1418ea22e8c038684 100644 (file)
@@ -57,6 +57,9 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
     BHV_PDATA(&bhv) = (void *)so;
 #endif
 
+    memset(&tuio, 0, sizeof(tuio));
+    memset(&tmpvec, 0, sizeof(tmpvec));
+
     tuio.uio_iov = tmpvec;
     tuio.uio_iovcnt = nvecs;
     tuio.uio_offset = 0;
@@ -429,6 +432,9 @@ osi_NetSend(asocket, addr, dvec, nvec, asize, istack)
     int i;
     bhv_desc_t bhv;
 
+    memset(&tuio, 0, sizeof(tuio));
+    memset(&tvecs, 0, sizeof(tvecs));
+
     if (nvec > RX_MAXWVECS + 1) {
        osi_Panic("osi_NetSend: %d: Too many iovecs.\n", nvec);
     }
index f4cb558735cbf6a0f9b34b8d409e82b42a4dd976..5b3c5f856f65384e2ae11ca9dd10d52730e2e877 100644 (file)
@@ -24,6 +24,9 @@ osi_NetReceive(osi_socket asocket, struct sockaddr_in *addr,
 
     int glocked = ISAFS_GLOCK();
 
+    memset(&u, 0, sizeof(u));
+    memset(&iov, 0, sizeof(iov));
+
     if (nvecs > RX_MAXIOVECS)
        osi_Panic("osi_NetReceive: %d: too many iovecs\n", nvecs);
 
@@ -89,6 +92,9 @@ osi_NetSend(osi_socket asocket, struct sockaddr_in *addr, struct iovec *dvec,
     struct mbuf *nam;
     int glocked = ISAFS_GLOCK();
 
+    memset(&u, 0, sizeof(u));
+    memset(&iov, 0, sizeof(iov));
+
     AFS_STATCNT(osi_NetSend);
     if (nvecs > RX_MAXIOVECS)
        osi_Panic("osi_NetSend: %d: Too many iovecs.\n", nvecs);
index 569caac4619d35649e7aed2dfed8cb0c3a4bf1cf..9e61c33d654afae052aa47dbdbeb1fcc9d374ac7 100644 (file)
@@ -24,6 +24,9 @@ osi_NetReceive(osi_socket asocket, struct sockaddr_in *addr,
 
     int haveGlock = ISAFS_GLOCK();
 
+    memset(&u, 0, sizeof(u));
+    memset(&iov, 0, sizeof(iov));
+
     if (nvecs > RX_MAXIOVECS)
        osi_Panic("osi_NetReceive: %d: too many iovecs\n", nvecs);
 
@@ -92,6 +95,9 @@ osi_NetSend(osi_socket asocket, struct sockaddr_in *addr, struct iovec *dvec,
     struct mbuf *nam;
     int haveGlock = ISAFS_GLOCK();
 
+    memset(&u, 0, sizeof(u));
+    memset(&iov, 0, sizeof(iov));
+
     AFS_STATCNT(osi_NetSend);
     if (nvecs > RX_MAXIOVECS)
        osi_Panic("osi_NetSend: %d: Too many iovecs.\n", nvecs);
index 2118e04832e9c421f693cc842983ea0a5a2973fa..19df875c5b0ec8b1aad42248f8a4d360b1efc10e 100644 (file)
@@ -491,6 +491,9 @@ osi_NetSend(osi_socket asocket, struct sockaddr_in *addr, struct iovec *dvec,
     int error;
     int i;
 
+    memset(&uio, 0, sizeof(uio));
+    memset(&iov, 0, sizeof(iov));
+
     if (nvecs > RX_MAXIOVECS) {
        osi_Panic("osi_NetSend: %d: Too many iovecs.\n", nvecs);
     }
@@ -531,6 +534,9 @@ osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
     int error;
     int i;
 
+    memset(&uio, 0, sizeof(uio));
+    memset(&iov, 0, sizeof(iov));
+
     if (nvecs > RX_MAXIOVECS) {
        osi_Panic("osi_NetSend: %d: Too many iovecs.\n", nvecs);
     }