โฌข DragonFlyBSD Kernel Audit
DF-5779 / disasm.txt
โ† back to finding โ†“ download raw
Disassembly evidence โ€” shipped guest modules (kernel DragonFly 6.5-DEVELOPMENT
#0 Thu Jul  2 06:02:54 2026, X86_64_GENERIC; md5 of source files verified
identical to the audited tree).

(1) __drm_puts_seq_file in /boot/kernel/drm.ko โ€” the only in-tree route that
    feeds a RUNTIME string into seq_puts() (sys/dev/drm/drm_print.c:128):

00000000000374f0 <__drm_puts_seq_file>:
   374f0:	48 8b 47 10          	mov    0x10(%rdi),%rax   ; rax = p->arg = seq_file*
   374f4:	48 89 f2             	mov    %rsi,%rdx         ; <<< str -> %rdx
   374f7:	48 8b 38             	mov    (%rax),%rdi       ; arg1 = m->buf
   374fa:	48 8b 70 08          	mov    0x8(%rax),%rsi    ; arg2 = m->size
   374fe:	31 c0                	xor    %eax,%eax         ; 0 vector regs
   37500:	e9 00 00 00 00       	jmpq   37505 <...+0x15>  ; tail-jmp ksnprintf

x86-64 SysV: ksnprintf(rdi=buf, rsi=size, rdx=fmt, ...). The caller's DATA
string is moved into %rdx โ€” the FORMAT parameter. Machine-code proof of the
contract divergence vs Linux seq_puts(m, str) which never interprets str.

Symbol table (drm.ko): U ksnprintf, U kvsnprintf, T __drm_puts_seq_file,
T seq_printf โ€” the shim is linked and callable; only the debugfs dispatch
that would instantiate struct seq_file is absent (CONFIG_DEBUG_FS unset).

(2) seq_printf in /boot/kernel/drm.ko (linux_printf.c:31-39) for reference โ€”
    note ksnprintf reached with rdx=f(fmt) and a synthesized va_list; the
    va_list-forwarding ABI question itself is known finding DF-2224 and is
    NOT re-reported here.