[Bug 271378] negative jt_size in ffs truncate journal record causes fsck to crash

From: <bugzilla-noreply_at_freebsd.org>
Date: Fri, 12 May 2023 10:44:32 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=271378

            Bug ID: 271378
           Summary: negative jt_size in ffs truncate journal record causes
                    fsck to crash
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: rtm@lcs.mit.edu

Created attachment 242130
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=242130&action=edit
gzipped ffs image with bad journal record that causes fsck to crash in
ino_trunc

If a truncate journal record has a negative size, suj.c's ino_trunc()
will index di_db[] with a negative index here:

        lastlbn = lblkno(fs, blkroundup(fs, size));
        for (i = lastlbn; i < UFS_NDADDR; i++) {
                if ((bn = DIP(dp, di_db[i])) == 0)

I've attached a gzipped file system image; here's the backtrace
from fsck_ffs -y fsck22a.img:

Program received signal SIGSEGV, Segmentation fault.
Address not mapped to object.
0x000000000022aaca in ino_trunc (ino=3, size=-4420917493761) at suj.c:1329
1329                    if ((bn = DIP(dp, di_db[i])) == 0)
(gdb) where
#0  0x000000000022aaca in ino_trunc (ino=3, size=-4420917493761) at suj.c:1329
#1  0x00000000002270f7 in cg_trunc (sc=0x800a8a8c0) at suj.c:1574
#2  0x0000000000226dc5 in cg_apply (apply=0x227090 <cg_trunc>) at suj.c:1638
#3  0x0000000000225562 in suj_check (filesys=0x7fffffffed74 "junk")
    at suj.c:2460
#4  0x00000000002195c6 in checkfilesys (filesys=0x7fffffffed74 "junk")
    at main.c:356
#5  0x0000000000218f72 in main (argc=1, argv=0x7fffffffea20) at main.c:210

-- 
You are receiving this mail because:
You are the assignee for the bug.