diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2017-04-12 15:23:09 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2017-04-12 15:23:09 +0000 |
commit | a672bcbef3d1248080f1bd8d0a808a1b80a5179c (patch) | |
tree | 6df561d23db79b5632c847d3ad1e43c22b7f8994 /sbin | |
parent | 7cd866c40205ff86ed4b6d44ca65b39924d2798f (diff) |
Prevent inosused from wrapping when soft updates is enabled while
scanning the used inode map. The code as written assumes inosused
is signed but this is no longer the case. OK deraadt@
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/fsck_ffs/pass1.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sbin/fsck_ffs/pass1.c b/sbin/fsck_ffs/pass1.c index 02bb8ad32a5..61d5431ecb8 100644 --- a/sbin/fsck_ffs/pass1.c +++ b/sbin/fsck_ffs/pass1.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pass1.c,v 1.44 2017/04/10 08:19:12 fcambus Exp $ */ +/* $OpenBSD: pass1.c,v 1.45 2017/04/12 15:23:08 millert Exp $ */ /* $NetBSD: pass1.c,v 1.16 1996/09/27 22:45:15 christos Exp $ */ /* @@ -116,9 +116,14 @@ pass1(void) */ if (preen && usedsoftdep) { cp = &cg_inosused(&cgrp)[(inosused - 1) / CHAR_BIT]; - for ( ; inosused > 0; inosused -= CHAR_BIT, cp--) { - if (*cp == 0) + for ( ; inosused != 0; cp--) { + if (*cp == 0) { + if (inosused > CHAR_BIT) + inosused -= CHAR_BIT; + else + inosused = 0; continue; + } for (i = 1 << (CHAR_BIT - 1); i > 0; i >>= 1) { if (*cp & i) break; |