From: millert Date: Wed, 12 Apr 2017 15:23:08 +0000 (+0000) Subject: Prevent inosused from wrapping when soft updates is enabled while X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=46e7f36feb8ac85925dcb01367a405d44c2fe952;p=openbsd 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@ --- 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;