vlserver: fix vlentryread() for old vldb formats 65/13465/2
authorBenjamin Kaduk <kaduk@mit.edu>
Sat, 2 Feb 2019 20:23:03 +0000 (14:23 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 1 Mar 2019 13:25:50 +0000 (08:25 -0500)
When we're using old format compatibility, use OMAXNSERVERS for the
array lengths instead of MAXNSERVERS.  Otherwise we'll try to copy more
data than we've read.

Detected by gcc8 as:

vlutils.c:183:2: error: ‘memcpy’ forming offset [149, 151] is out of the bounds [0, 148] of object ‘tentry’ with type ‘struct vlentry’ [-Werror=array-bounds]
  memcpy(nbufp->serverFlags, oep->serverFlags, NMAXNSERVERS);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vlutils.c:141:26: note: ‘tentry’ declared here
     struct vlentry *oep, tentry;
                          ^~~~~~

Change-Id: Ie720ca037c5a8bd6aaff5b6d5348161e0175b23b
Reviewed-on: https://gerrit.openafs.org/13465
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

src/vlserver/vlutils.c

index 50597c0..710d368 100644 (file)
@@ -178,9 +178,9 @@ vlentryread(struct ubik_trans *trans, afs_int32 offset, char *buffer,
            nbufp->nextIdHash[i] = ntohl(oep->nextIdHash[i]);
        nbufp->nextNameHash = ntohl(oep->nextNameHash);
        memcpy(nbufp->name, oep->name, VL_MAXNAMELEN);
-       memcpy(nbufp->serverNumber, oep->serverNumber, NMAXNSERVERS);
-       memcpy(nbufp->serverPartition, oep->serverPartition, NMAXNSERVERS);
-       memcpy(nbufp->serverFlags, oep->serverFlags, NMAXNSERVERS);
+       memcpy(nbufp->serverNumber, oep->serverNumber, OMAXNSERVERS);
+       memcpy(nbufp->serverPartition, oep->serverPartition, OMAXNSERVERS);
+       memcpy(nbufp->serverFlags, oep->serverFlags, OMAXNSERVERS);
     }
     return 0;
 }