ubik/udebug.c, vol/vol-info.c: check array index before dereferencing
authorNickolai Zeldovich <nickolai@csail.mit.edu>
Sun, 6 Jan 2013 04:44:55 +0000 (23:44 -0500)
committerJeffrey Altman <jaltman@your-file-system.com>
Sun, 6 Jan 2013 16:34:33 +0000 (08:34 -0800)
Avoid out-of-bounds array accesses by first checking that the index
is in-bounds, and then dereferencing; not the other way around.

Change-Id: Ib36a28ca6181a7a7fd602de45cb5a15fad099a44
Reviewed-on: http://gerrit.openafs.org/8879
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/ubik/udebug.c
src/vol/vol-info.c

index 99fd110..7954a84 100644 (file)
@@ -144,7 +144,7 @@ CommandProc(struct cmd_syndesc *as, void *arock)
     times[24] = 0;
     if (!oldServer) {
        printf("Host's addresses are: ");
-       for (j = 0; udebug.interfaceAddr[j] && (j < UBIK_MAX_INTERFACE_ADDR);
+       for (j = 0; (j < UBIK_MAX_INTERFACE_ADDR) && udebug.interfaceAddr[j];
             j++)
            printf("%s ", afs_inet_ntoa_r(htonl(udebug.interfaceAddr[j]), hoststr));
        printf("\n");
@@ -277,7 +277,7 @@ CommandProc(struct cmd_syndesc *as, void *arock)
            /* otherwise print the structure */
            printf("\nServer (%s", afs_inet_ntoa_r(htonl(usdebug.addr), hoststr));
            for (j = 0;
-                ((usdebug.altAddr[j]) && (j < UBIK_MAX_INTERFACE_ADDR - 1));
+                ((j < UBIK_MAX_INTERFACE_ADDR - 1) && (usdebug.altAddr[j]));
                 j++)
                printf(" %s", afs_inet_ntoa_r(htonl(usdebug.altAddr[j]), hoststr));
            printf("): (db %d.%d)", usdebug.remoteVersion.epoch,
index c1fe3db..0c8b2d1 100644 (file)
@@ -2116,7 +2116,7 @@ ModeMaskMatch(unsigned int modeBits)
 {
     int i;
 
-    for (i = 0; ModeMask[i] && i <= sizeof(ModeMask) / sizeof(*ModeMask); i++) {
+    for (i = 0; i < sizeof(ModeMask) / sizeof(*ModeMask) && ModeMask[i]; i++) {
        if ((ModeMask[i] & modeBits) == 0) {
            return 0;           /* at least one mode bit is not present */
        }