viced: move host tmay fields before index
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 11 Jun 2014 23:37:34 +0000 (19:37 -0400)
committerD Brashear <shadow@your-file-system.com>
Wed, 29 Oct 2014 21:30:42 +0000 (17:30 -0400)
The index field and those after it in struct host do not get zeroed
when a host is reused.  The placement of the tmay fields after index
in commit 9a0a8ca4d186cf953b87d9fae1a35f66090b060c results in the
use of uninitialized memory.

This change moves the tmay fields before index which permits
the HOST_TO_ZERO() macro to compute the correct size to be memset()
to zero.

Change-Id: I1f93bebb23c99eaa7826dafa8cd7497d1b49bb53
Reviewed-on: http://gerrit.openafs.org/11286
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: D Brashear <shadow@your-file-system.com>

src/viced/host.h

index 8c8ba39..bb14504 100644 (file)
@@ -73,16 +73,19 @@ struct host {
     afs_uint32 cpsCall;                /* time of last cps call from this host */
     struct Interface *interface;       /* all alternate addr for client */
     afs_uint32 cblist;         /* index of a cb in the per-host circular CB list */
-    /*
-     * These don't get zeroed, keep them at the end.
-     */
-    afs_uint32 index;          /* Host table index, for vicecb.c */
+
     unsigned int n_tmays;       /* how many successful TellMeAboutYourself calls
                                  * have we made against this host? */
     /* cache of the result of the last successful TMAY call to this host */
     struct interfaceAddr tmay_interf;
     Capabilities tmay_caps;
 
+    /*
+     * These don't get zeroed, keep them at the end. If index doesn't
+     * follow an unsigned short then we need to pad to ensure that
+     * the index fields isn't zeroed. XXX
+     */
+    afs_uint32 index;          /* Host table index, for vicecb.c */
     struct Lock lock;          /* Write lock for synchronization of
                                 * VenusDown flag */
     pthread_cond_t cond;       /* used to wait on hcpsValid */