โฌข DragonFlyBSD Kernel Audit
DF-0393 / fix_run.log
โ† back to finding โ†“ download raw
============================================================
DF-0393 FIX VALIDATION โ€” single-fix kernel #1 (Thu Jul 16 02:19:43 UTC 2026)
fix.diff applied to /usr/src, kernel rebuilt (rc=0), installed as /boot/kernel/kernel
(sha256 26f47b98b14fe33c618f10ee1dd0e7a6954977449a2be589c88d9cea4bc5c9d1),
booted as #1.
============================================================
[1] PATCHED snippet (harness_fixed.c, verbatim clamped sta_add:310-322):
    meshid[1]=200 -> clamped 32, copy 34 bytes, se_ies/se_age/canary INTACT
------------------------------------------------------------
[meshid=200]
--- meshid[1]=200 ---
=== DF-0393 harness: Mesh ID heap overflow in sta_add() ===
struct ieee80211_scan_entry size : 504 bytes
  offsetof(se_meshid)            : 348
  offsetof(se_ies)                : 384  (overflow lands here)
  offsetof(se_age)                : 496
  sizeof(se_ies)                  : 112
se_meshid field width             : 34 bytes (2+IEEE80211_MESHID_LEN, LEN=32)
Attacker Mesh ID IE length byte   : 200 (sp->meshid[1])
memcpy copy size (2+meshid[1])    : 202 bytes
Overflow past se_meshid[34]       : 168 bytes

[*] Invoking verbatim sta_add():312 memcpy...
[*] memcpy returned (no trap in userspace โ€” the OOB write is silent).

---- Corruption report (PATCHED harness) ----
  input meshid[1]            = 200
  clamped meshidlen          = 32 (IEEE80211_MESHID_LEN=32)
  actual memcpy size         = 34 bytes (<= se_meshid width 34)
  se_meshid[34] (full field) (34 bytes):
    71c84d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d
    4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d
    4d4d
  se_ies.wpa_ie ptr          = 0xaaaaaaaaaaaaaaaa  (intact)
  se_age                     = 0xAABBCCDD  (intact)
  canary                     = intact

VERDICT: NO OVERFLOW โ€” fix in effect: meshid[1]=200 clamped to 32, actual copy 34 bytes fits se_meshid[34]; se_ies/se_age/canary all intact.

[meshid=255 (max ceiling)]
=== DF-0393 harness: Mesh ID heap overflow in sta_add() ===
struct ieee80211_scan_entry size : 504 bytes
  offsetof(se_meshid)            : 348
  offsetof(se_ies)                : 384  (overflow lands here)
  offsetof(se_age)                : 496
  sizeof(se_ies)                  : 112
se_meshid field width             : 34 bytes (2+IEEE80211_MESHID_LEN, LEN=32)
Attacker Mesh ID IE length byte   : 255 (sp->meshid[1])
memcpy copy size (2+meshid[1])    : 257 bytes
Overflow past se_meshid[34]       : 223 bytes

[*] Invoking verbatim sta_add():312 memcpy...
[*] memcpy returned (no trap in userspace โ€” the OOB write is silent).

---- Corruption report (PATCHED harness) ----
  input meshid[1]            = 255
  clamped meshidlen          = 32 (IEEE80211_MESHID_LEN=32)
  actual memcpy size         = 34 bytes (<= se_meshid width 34)
  se_meshid[34] (full field) (34 bytes):
    71ff4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d
    4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d
    4d4d
  se_ies.wpa_ie ptr          = 0xaaaaaaaaaaaaaaaa  (intact)
  se_age                     = 0xAABBCCDD  (intact)
  canary                     = intact

VERDICT: NO OVERFLOW โ€” fix in effect: meshid[1]=255 clamped to 32, actual copy 34 bytes fits se_meshid[34]; se_ies/se_age/canary all intact.

------------------------------------------------------------
[2] CONTROL: unfixed snippet (harness.c) STILL overflows on the same #1 guest
    (proves the harness is sound; only the clamp differs)
------------------------------------------------------------
  offsetof(se_age)                : 496
memcpy copy size (2+meshid[1])    : 257 bytes
Overflow past se_meshid[34]       : 223 bytes
  OVERFLOW detected: 223 bytes wrote past end of se_meshid[34]
  se_ies.wpa_ie   ptr = 0x4242414141414141  (was 0xAAAAAAAAAAAAAAAA)
  se_age                = 0x41414141  (was 0xAABBCCDD)
  CANARY CORRUPTED at tail offset +0 (se_age+16+0 region)
  => OOB write reached 1 bytes beyond se_age (into adjacent heap)
VERDICT: OOB WRITE CONFIRMED โ€” 223 bytes past se_meshid[34] (112 into se_ies, rest into se_age/canary)

============================================================
FIX VERDICT: patched snippet clamps meshid[1] to 32 for ALL inputs (200,255);
actual copy = 34 bytes = exactly se_meshid[34]; NO overflow into se_ies/se_age.
Unfixed snippet still overflows (223 bytes @ meshid[1]=255). Fix closes the path.
============================================================