Author: mckusick
Date: Sat Jul  7 19:11:43 2018
New Revision: 336074
URL: https://svnweb.freebsd.org/changeset/base/336074

Log:
  Import commit from NetBSD with checkin message:
  
      Avoid Undefined Behavior in ffs_clusteracct()
  
      Change the type of 'bit' variable from int to unsigned int and use 
unsigned
      values consistently.
  
      sys/ufs/ffs/ffs_subr.c:336:10, shift exponent -1 is negative
  
      Detected with Kernel Undefined Behavior Sanitizer.
  
      Reported by <Harry Pantazis>
  
  Submitted by: Pedro Giffuni

Modified:
  head/sys/ufs/ffs/ffs_subr.c

Modified: head/sys/ufs/ffs/ffs_subr.c
==============================================================================
--- head/sys/ufs/ffs/ffs_subr.c Sat Jul  7 19:10:00 2018        (r336073)
+++ head/sys/ufs/ffs/ffs_subr.c Sat Jul  7 19:11:43 2018        (r336074)
@@ -473,7 +473,8 @@ ffs_clusteracct(struct fs *fs, struct cg *cgp, ufs1_da
        int32_t *sump;
        int32_t *lp;
        u_char *freemapp, *mapp;
-       int i, start, end, forw, back, map, bit;
+       int i, start, end, forw, back, map;
+       u_int bit;
 
        if (fs->fs_contigsumsize <= 0)
                return;
@@ -495,7 +496,7 @@ ffs_clusteracct(struct fs *fs, struct cg *cgp, ufs1_da
                end = cgp->cg_nclusterblks;
        mapp = &freemapp[start / NBBY];
        map = *mapp++;
-       bit = 1 << (start % NBBY);
+       bit = 1U << (start % NBBY);
        for (i = start; i < end; i++) {
                if ((map & bit) == 0)
                        break;
@@ -516,7 +517,7 @@ ffs_clusteracct(struct fs *fs, struct cg *cgp, ufs1_da
                end = -1;
        mapp = &freemapp[start / NBBY];
        map = *mapp--;
-       bit = 1 << (start % NBBY);
+       bit = 1U << (start % NBBY);
        for (i = start; i > end; i--) {
                if ((map & bit) == 0)
                        break;
@@ -524,7 +525,7 @@ ffs_clusteracct(struct fs *fs, struct cg *cgp, ufs1_da
                        bit >>= 1;
                } else {
                        map = *mapp--;
-                       bit = 1 << (NBBY - 1);
+                       bit = 1U << (NBBY - 1);
                }
        }
        back = start - i;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to