wifi: iwlwifi: fix potential use after free in iwl_mld_remove_link()
Subsystems (2)
PATCH 1/1 wifi: iwlwifi: fix potential use after free in iwl_mld_remove_link()
This code frees "link" by calling kfree_rcu(link, rcu_head) and then it dereferences "link" to get the "link->fw_id". Save the "link->fw_id" first to avoid a potential use after free.
Fixes d1e879ec600f ("wifi: iwlwifi: add iwlmld sub-driver")
Signed-off-by Dan Carpenter <[email protected]>
--- drivers/net/wireless/intel/iwlwifi/mld/link.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/net/wireless/intel/iwlwifi/mld/link.c +3 -2
@@ -501,6 +501,7 @@ void iwl_mld_remove_link(struct iwl_mld *mld,struct iwl_mld_vif *mld_vif =iwl_mld_vif_from_mac80211 (bss_conf->vif);struct iwl_mld_link *link =iwl_mld_link_from_mac80211 (bss_conf);bool is_deflink = link == &mld_vif->deflink; +u8 fw_id = link->fw_id;if (WARN_ON (!link || link->active))return ;
@@ -513,10 +514,10 @@ void iwl_mld_remove_link(struct iwl_mld *mld,RCU_INIT_POINTER (mld_vif->link[bss_conf->link_id],NULL ); -if (WARN_ON (link->fw_id >= mld->fw->ucode_capa.num_links)) +if (WARN_ON (fw_id >= mld->fw->ucode_capa.num_links))return ; -RCU_INIT_POINTER (mld->fw_id_to_bss_conf[link->fw_id],NULL ); +RCU_INIT_POINTER (mld->fw_id_to_bss_conf[fw_id],NULL ); } void iwl_mld_handle_missed_beacon_notif(struct iwl_mld *mld,
Signature · 1 line
2.51.0