Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 May 2021 20:38:37 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: f190f9193bc1 - main - Fix fsck_ufs segfaults with gjournal (SU+J)
Message-ID:  <202105212038.14LKcb3U062829@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=f190f9193bc10a8193c87e0a02fa91400e4eb159

commit f190f9193bc10a8193c87e0a02fa91400e4eb159
Author:     Kirk McKusick <mckusick@FreeBSD.org>
AuthorDate: 2021-05-21 20:41:40 +0000
Commit:     Kirk McKusick <mckusick@FreeBSD.org>
CommitDate: 2021-05-21 20:42:37 +0000

    Fix fsck_ufs segfaults with gjournal (SU+J)
    
    The segfault was being hit in ckfini() (sbin/fsck_ffs/fsutil.c)
    while attempting to traverse the buffer cache to flush dirty buffers.
    The tail queue used for the buffer cache was not initialized before
    dropping into gjournal_check(). Move the buffer initialization earlier
    so that it has been done before calling gjournal_check().
    
    Reported by:  crypt47, nvass
    Fix by:       Robert Wing
    Tested by:    Robert Wing
    PR:           255030
    PR:           255979
    MFC after:    3 days
    Sponsored by: Netflix
---
 sbin/fsck_ffs/main.c  | 1 +
 sbin/fsck_ffs/setup.c | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/sbin/fsck_ffs/main.c b/sbin/fsck_ffs/main.c
index 401ee10f9be3..642e321fdd35 100644
--- a/sbin/fsck_ffs/main.c
+++ b/sbin/fsck_ffs/main.c
@@ -272,6 +272,7 @@ checkfilesys(char *filesys)
 	 * exit status will cause a foreground check to be run.
 	 */
 	sblock_init();
+	bufinit();
 	if (bkgrdcheck) {
 		if ((fsreadfd = open(filesys, O_RDONLY)) < 0 || readsb(0) == 0)
 			exit(3);	/* Cannot read superblock */
diff --git a/sbin/fsck_ffs/setup.c b/sbin/fsck_ffs/setup.c
index 0ae7f1bbb28f..d69beff879e9 100644
--- a/sbin/fsck_ffs/setup.c
+++ b/sbin/fsck_ffs/setup.c
@@ -298,7 +298,6 @@ setup(char *dev)
 		    (uintmax_t)numdirs * sizeof(struct inoinfo *));
 		goto badsb;
 	}
-	bufinit();
 	if (sblock.fs_flags & FS_DOSOFTDEP)
 		usedsoftdep = 1;
 	else



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