One-sided bound checks in the ratectl registry: ieee80211_ratectl_register/unregister/set accept negative type (OOB access below the ratectls[] function-pointer table); currently unreachable β all call sites pass constants
Summary
register/unregister/set check only 'type >= IEEE80211_RATECTL_MAX'; a negative type indexes below ratectls[]/ratectl_mod_names[] - in set() that is an OOB read of a function-pointer table stored into vap->iv_rate and then indirectly called. No reachable path today (no IEEE80211_IOC_RATECTL ioctl exists in DF's net80211; every caller passes a compile-time constant). Hardening to mirror the DF-3464 family fix. Fix: two-sided bound checks at all three sites. [VERIFIED pass2: one-sided type bounds confirmed; negative type unreachable constants; type-lt-0 guards compiled]
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-3471 Β· 4 files| File | Type | Description | Size | |
|---|---|---|---|---|
| README.md | β | 236 B | β raw | |
| fix.diff | β | 867 B | view raw | |
| manifest.json | β | 391 B | view raw | |
| verdict.json | β | 1.5 KB | view raw |
DF-3471 evidence pack
What
ratectl registry index checks are one-sided (negative type OOB)
Verdict
status=not_reproduced impact=none confidence=certain
See VERDICT.md for the full narrative and fix.diff for the verified fix.
Fix verification
not_testablefix.diff applied in the F40FIX verification kernel build (RC=0, zero -Werror errors); no runtime A/B for this item (line-certain hardening)
Confirmed kernel references
Detail
Evidence (decisive lines)
VERDICT.md with path:line citations; run.log where a live demo exists; fix.diff
PoC changes
n/a - all call sites pass constants
Verified recommended fix
type < 0 guards in register/unregister/set
Verdict
Line-accurate confirmation: ieee80211_ratectl_register/unregister (ieee80211_ratectl.c:57-73) and ieee80211_ratectl_set (:135+) check only type >= IEEE80211_RATECTL_MAX; a negative type indexes below ratectls[]/ratectl_mod_names[] and set() stores the OOB-read function pointer into vap->iv_rate for later indirect call. Unreachable today (no IEEE80211_IOC_RATECTL ioctl exists in DFs net80211; every caller passes a compile-time constant). Fix adds type < 0 guards at all three sites; compiled in the F40FIX build.
No comments yet.