]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
libadmin/vos/vosutils.c: mask out sign-extension
authorNickolai Zeldovich <nickolai@csail.mit.edu>
Sun, 6 Jan 2013 04:45:59 +0000 (23:45 -0500)
committerStephan Wiesand <stephan.wiesand@desy.de>
Fri, 22 Mar 2013 14:40:02 +0000 (07:40 -0700)
Right-shifting a signed int by 24 bits can produce a value outside of
0..0xff due to sign-extension.  As a result, in AddressMatch(), the
first bPattern!=255 check can never succeed.  Fix by masking with 255
before comparison.

Reviewed-on: http://gerrit.openafs.org/8884
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit 8e8e3c26b87d78b92d96ba91d58ee59d774ebcb5)

Change-Id: Ifee303905d004936e96f6be1e6a9188d7b70978c
Reviewed-on: http://gerrit.openafs.org/9517
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
src/libadmin/vos/vosutils.c

index 4672651c873bb37e6971294db6e38edb19d09772..4ac47bfe3eca6cf577eae21b3a249d29dd4bd87f 100644 (file)
@@ -567,8 +567,8 @@ AddressMatch(int addrTest, int addrPattern)
     int bPattern;
 
     /* Test the high byte */
-    bTest = addrTest >> 24;
-    bPattern = addrPattern >> 24;
+    bTest = (addrTest >> 24) & 255;
+    bPattern = (addrPattern >> 24) & 255;
     if ((bTest != bPattern) && (bPattern != 255)) {
        return FALSE;
     }