DragonFlyBSD Kernel Audit
DF-2458 / panic.txt
← back to finding ↓ download raw

login: iscsi: version 2.1.0
panic: assertion "obj != NULL" failed in vm_object_hold_shared at /usr/src/sys/vm/vm_object.c:330
cpuid = 0
Trace beginning at frame 0xfffff801183eb558
vm_object_hold_shared() at vm_object_hold_shared+0x3f 0xffffffff809ab9bf 
vm_object_hold_shared() at vm_object_hold_shared+0x3f 0xffffffff809ab9bf 
vm_fault() at vm_fault+0x408 0xffffffff8099e0b8 
trap_pfault() at trap_pfault+0x9a 0xffffffff80bd52ca 
trap() at trap+0x17c 0xffffffff80bd5bcc 
calltrap() at calltrap+0x9 0xffffffff80b991fa 
--- trap 000000000000000c, rip = ffffffff80bcabf6, rsp = fffff801183eb970, rbp = fffff801183eb9c0 ---
memcpy() at memcpy+0x66 0xffffffff80bcabf6 
Debugger("panic")

CPU0 stopping CPUs: 0x0000003e
 stopped
Stopped at      Debugger+0x7c:  movb    $0,0xbdaf09(%rip)
db> 

--- earlier run (bo=0x40000000): write-fault variant ---

=== Earlier reproduction (bo=0x40000000), direct write-fault ===
Fatal trap 12: page fault while in kernel mode
fault virtual address  = 0xfffff80157b32860
fault code             = supervisor write data, page not present     <-- WRITE
instruction pointer    = 0x8:0xffffffff80bcabf6
Stopped at      memcpy+0x66:    movq    %rdx,(%rdi)                  <-- i_mbufcopy memcpy

Both runs panic inside memcpy() called from i_mbufcopy() (iscsi_subr.c:574),
which scsi_decap() (iscsi_subr.c:574) reaches via dp = csio->data_ptr +
ntohl(rcmd->bo). The fault address = data_ptr + attacker-controlled bo.