Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 27 May 2023 05:43:45 GMT
From:      Kirk McKusick <mckusick@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 03a8680202ef - main - Correct two bugs in fsck_ffs(8) triggered by corrupted filesystems.
Message-ID:  <202305270543.34R5hjF8061331@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by mckusick:

URL: https://cgit.FreeBSD.org/src/commit/?id=03a8680202ef7d7e68adc70625633c490b4ed637

commit 03a8680202ef7d7e68adc70625633c490b4ed637
Author:     Kirk McKusick <mckusick@FreeBSD.org>
AuthorDate: 2023-05-27 05:41:57 +0000
Commit:     Kirk McKusick <mckusick@FreeBSD.org>
CommitDate: 2023-05-27 05:43:21 +0000

    Correct two bugs in fsck_ffs(8) triggered by corrupted filesystems.
    
    Always create a directory inode structure when a directory inode is
    found in Pass 1 as it is not known whether it will be saved or removed
    in later passes. If it is to be saved the directory inode structure
    is needed to track its status and fsck_ffs(8) will segment fault if
    it does not exist.
    
    Reported-by:  Robert Morris
    PR:           271310
    PR:           271354
    MFC-after:    1 week
    Sponsored-by: The FreeBSD Foundation
---
 sbin/fsck_ffs/pass1.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sbin/fsck_ffs/pass1.c b/sbin/fsck_ffs/pass1.c
index e784fd29dc1c..863bf34ff0fc 100644
--- a/sbin/fsck_ffs/pass1.c
+++ b/sbin/fsck_ffs/pass1.c
@@ -400,13 +400,13 @@ checkinode(ino_t inumber, struct inodesc *idesc, int rebuiltcg)
 	if (mode == IFDIR) {
 		if (DIP(dp, di_size) == 0) {
 			inoinfo(inumber)->ino_state = DCLEAR;
-		} else if (DIP(dp, di_nlink) <= 0) {
+		} else if (DIP(dp, di_nlink) == 0) {
 			inoinfo(inumber)->ino_state = DZLINK;
 		} else {
 			inoinfo(inumber)->ino_state = DSTATE;
-			cacheino(dp, inumber);
-			countdirs++;
 		}
+		cacheino(dp, inumber);
+		countdirs++;
 	} else if (DIP(dp, di_nlink) <= 0)
 		inoinfo(inumber)->ino_state = FZLINK;
 	else



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202305270543.34R5hjF8061331>