wifi: mac80211: ieee80211_i: Fix memory corruption bug in struct ieee80211_chanctx
PATCH v2 1/1 wifi: mac80211: ieee80211_i: Fix memory corruption bug in struct ieee80211_chanctx
Move the struct ieee80211_chanctx_conf conf to the end of struct ieee80211_chanctx and fix a memory corruption bug triggered in hwsim_set_chanctx_magic(): radar_detected is being overwritten when cp->magic = HWSIM_CHANCTX_MAGIC; See the function call sequence below:
drv_add_chanctx(... struct ieee80211_chanctx *ctx) ->
local->ops->add_chanctx(&local->hw, &ctx->conf) -> mac80211_hwsim_add_chanctx(... struct ieee80211_chanctx_conf *ctx) -> hwsim_set_chanctx_magic(ctx)
Also, add a code comment to try to prevent people from introducing new members after struct ieee80211_chanctx_conf conf. Notice that struct ieee80211_chanctx_conf is a flexible structure --a structure that contains a flexible-array member, so it should always be at the end of any other containing structures.
This change also fixes 50 of the following warnings:
net/mac80211/ieee80211_i.h:895:39: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
---
Changes in v2:
- Add Fixes: tag. (Johannes)
- Update Subject line and changelog text to better reflect the severity of this change.
v1:
- Link: https://lore.kernel.org/linux-hardening/Zxv7KtPEy1kvnTPM@kspp/
net/mac80211/ieee80211_i.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
net/mac80211/ieee80211_i.h +3 -2
@@ -892,9 +892,10 @@ struct ieee80211_chanctx {/* temporary data for search algorithm etc. */ struct ieee80211_chan_req req; -struct ieee80211_chanctx_conf conf; -bool radar_detected; + +/* MUST be last - ends in a flexible-array member. */ +struct ieee80211_chanctx_conf conf; };struct mac80211_qos_map {
Signature · 1 line
2.34.1