⬢ DragonFlyBSD Kernel Audit
DF-3317 / run.log
← back to finding ↓ download raw
DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul  2 06:02:54 UTC 2026     root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC  x86_64
change host ::1
ptb6: conn [::1].4530 <-> [::1].49180
before-PTB : t_state=5 t_maxseg=14336 t_maxopd=16324 t_rttupdated=41 snd_ssthresh=28672 snd_cwnd=28676
ptb6: injected ICMPv6 PTB mtu=60 quoting ::1.4530 -> ::1.49180
after-PTB  : t_state=5 t_maxseg=0 t_maxopd=0 t_rttupdated=41 snd_ssthresh=28672 snd_cwnd=28676
ptb6: -x given; sleeping so you can inspect
=== full run (close => panic). Serial console capture:

-- fatal trap (from panic.txt, identical on both fatal reproductions) --
  Fatal trap 18: integer divide fault while in kernel mode
  cpuid = 0; lapic id = 0
  instruction pointer	= 0x8:0xffffffff807c403e
  stack pointer	        = 0x10:0xfffff8008d1f89a0
  frame pointer	        = 0x10:0xfffff8008d1f8a50
  code segment		=  base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, long 1, def32 0, gran 1
  processor eflags	= interrupt enabled, resume, IOPL = 0
  current process	= Idle            <- netisr0 context (so_pcbdetach netmsg)
  current thread          = pri 12 (CRIT)
  kernel: type 18 trap, code=0

  CPU0 stopping CPUs: 0x0000003e
   stopped
  Stopped at      tcp_close+0x66e:        divq    %r8,%eax

Interpretation:
  * trap 18 = x86 #DE (integer divide error); the faulting instruction is
    the division in tcp_close() at sys/netinet/tcp_subr.c:1013
        i = (i + tp->t_maxseg / 2) / tp->t_maxseg;
    with tp->t_maxseg == 0 (u_int, tcp_var.h:223), set by tcp_mtudisc()
    (tcp_subr.c:1852-1871) from the forged ICMPv6 PTB's mtu=60
    (maxopd = 60 - 40 - 20 = 0).
  * "MSS (0) too small to hold options!" is the kernel's own tcp_output
    diagnostic firing on the corrupted tcpcb between the PTB and the close.
  * current process = Idle => the close ran from netisr0 via the socket
    detach netmsg => whole-system panic (fatal trap), not a per-process
    signal.  In the runs where the divide fault hit while the closing
    process was current, DFly delivered signal 11 to the process instead.