DragonFlyBSD Kernel Audit
DF-0782 / panic.txt
← back to finding ↓ download raw
DF-0782 — kernel panic signature (from dfbsd-qemu/boot.log)
================================================================
Trigger: maxx (uid 1001) runs write_trigger on /mnt/fuse/target:
        open(O_WRONLY); lseek(0x7FFFFFFFFFFFFFF0); write(fd, buf, 16)

The write() never returns — the kernel panics synchronously inside
fuse_vop_write -> fuse_reg_resize.

--- boot.log excerpt (lines 203-218) ---
203: fuse_mount(fuse_daemon|984): FUSE UABI 7.28
204: panic: assertion "newsize >= 0" failed in fuse_reg_resize at /usr/src/sys/vfs/fuse/fuse_vnops.c:1970
205: cpuid = 2
206: Trace beginning at frame 0xfffff80116a7c588
207: fuse_reg_resize() at fuse_reg_resize+0xd9 0xffffffff82602699
208: fuse_reg_resize() at fuse_reg_resize+0xd9 0xffffffff82602699
209: fuse_vop_write() at fuse_vop_write+0x322 0xffffffff82604cf2
217: Stopped at      Debugger+0x7c:  movb    $0,0xbdaf09(%rip)
218: db>

Call chain (confirmed):
  write(2) [maxx, uid 1001]
    -> fuse_vop_write()               [fuse_vnops.c:1428]
         newsize = uio_offset + uio_resid      [:1469] wraps to INT64_MIN
         if (newsize < oldsize) newsize=oldsize [:1470] masks the overflow
         (FUSE_MAXFILESIZE / RLIMIT checks pass)
         loop: (uio_offset + len) > fnp->size   [:1529] re-wraps to 0x8000000000000000
           fuse_reg_resize(vp, uio_offset+len, trivial)  [:1531] newsize arg = INT64_MIN
             KKASSERT(newsize >= 0)              [:1970] FAILS -> panic

This is the EXACT assertion and source line the finding cites.