โฌข DragonFlyBSD Kernel Audit
DF-0732 / fix_run.log
โ† back to finding โ†“ download raw
=== PATCHED-source validation (FIXED transcription == patched ieee80211_acl.c) ===
Patch: ACL_LOCK moved before as_nacls read (:313) + M_ZERO (:319) + bounded foreach (:329)

--- FIXED: GROW race (N=8 K=4) ---
=== DF-0732 harness (FIXED transcription: lock-before-read + M_ZERO + bounded foreach) ===
  mode=grow N=8 K=4  IEEE80211_ADDR_LEN=6

  [harness] N=8 K=4  as_nacls@read=8  space=48 bytes  list@foreach had 8 entries
  [harness] foreach wrote 48 bytes into 48-byte buffer (oob_flag=0)
  [harness] GROW: red zone intact โ€” no OOB write
GROW RACE: NOT TRIGGERED (no OOB write)

[exit rc=0]

--- FIXED: SHRINK race (N=8 K=4) ---
=== DF-0732 harness (FIXED transcription: lock-before-read + M_ZERO + bounded foreach) ===
  mode=shrink N=8 K=4  IEEE80211_ADDR_LEN=6

  [harness] N=8 K=4  as_nacls@read=8  space=48 bytes  list@foreach had 8 entries
  [harness] foreach wrote 48 bytes into 48-byte buffer (oob_flag=0)
  [harness] SHRINK: all tail slots zeroed/valid โ€” no uninit leak
SHRINK RACE: NOT TRIGGERED (no uninit tail)

[exit rc=0]

--- FIXED: GROW race (N=32 K=16) stress ---
=== DF-0732 harness (FIXED transcription: lock-before-read + M_ZERO + bounded foreach) ===
  mode=grow N=32 K=16  IEEE80211_ADDR_LEN=6

  [harness] N=32 K=16  as_nacls@read=32  space=192 bytes  list@foreach had 32 entries
  [harness] foreach wrote 192 bytes into 192-byte buffer (oob_flag=0)
  [harness] GROW: red zone intact โ€” no OOB write
GROW RACE: NOT TRIGGERED (no OOB write)

[exit rc=0]

--- FIXED: SHRINK race (N=32 K=16) stress ---
=== DF-0732 harness (FIXED transcription: lock-before-read + M_ZERO + bounded foreach) ===
  mode=shrink N=32 K=16  IEEE80211_ADDR_LEN=6

  [harness] N=32 K=16  as_nacls@read=32  space=192 bytes  list@foreach had 32 entries
  [harness] foreach wrote 192 bytes into 192-byte buffer (oob_flag=0)
  [harness] SHRINK: all tail slots zeroed/valid โ€” no uninit leak
SHRINK RACE: NOT TRIGGERED (no uninit tail)

[exit rc=0]

############################################################
# REAL-KERNEL Phase 8 validation (fixed wlan_acl.ko, sha256 c23e324c...)
############################################################
# Fixed module loaded (rebuilt from patched source: lock-before-read + M_ZERO
# + bounded foreach).  Same harness_mod.ko + trigger/leakcheck exercising the
# REAL acl_getioctl via /dev/df0732.  debug.use_malloc_pattern=1 so any uninit
# slab residue would carry WEIRD_ADDR (0xdeadc0de).

=== FIXED module: trigger (grow-race OOB check) โ€” expect NO PANIC ===
trigger: 241489 LIST ioctls, no panic, guest stayed UP (grow race eliminated)

=== FIXED module: leakcheck (shrink-race residue check) โ€” expect WEIRD_ADDR=0 ===
leakcheck: 77004 LIST ioctls
  adder/seed MAC slots : 116921936
  ZERO (M_ZERO) slots  : 0          (buffer exactly filled: space==nacls*6, no tail)
  WEIRD_ADDR residue   : 0   (none โ€” leak eliminated)
  OTHER (suspicious)   : 0
LC_EXIT=0   guest UP, NO PANIC