Patch "wifi: wilc1000: fix potential RCU dereference issue in wilc_parse_join_bss_param" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    wifi: wilc1000: fix potential RCU dereference issue in wilc_parse_join_bss_param

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     wifi-wilc1000-fix-potential-rcu-dereference-issue-in.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 631f22b910e651e34da06c2cfe35e43d72c676e0
Author: Jiawei Ye <jiawei.ye@xxxxxxxxxxx>
Date:   Thu Aug 29 08:17:09 2024 +0000

    wifi: wilc1000: fix potential RCU dereference issue in wilc_parse_join_bss_param
    
    [ Upstream commit 6d7c6ae1efb1ff68bc01d79d94fdf0388f86cdd8 ]
    
    In the `wilc_parse_join_bss_param` function, the TSF field of the `ies`
    structure is accessed after the RCU read-side critical section is
    unlocked. According to RCU usage rules, this is illegal. Reusing this
    pointer can lead to unpredictable behavior, including accessing memory
    that has been updated or causing use-after-free issues.
    
    This possible bug was identified using a static analysis tool developed
    by myself, specifically designed to detect RCU-related issues.
    
    To address this, the TSF value is now stored in a local variable
    `ies_tsf` before the RCU lock is released. The `param->tsf_lo` field is
    then assigned using this local variable, ensuring that the TSF value is
    safely accessed.
    
    Fixes: 205c50306acf ("wifi: wilc1000: fix RCU usage in connect path")
    Signed-off-by: Jiawei Ye <jiawei.ye@xxxxxxxxxxx>
    Reviewed-by: Alexis Lothoré <alexis.lothore@xxxxxxxxxxx>
    Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxx>
    Link: https://patch.msgid.link/tencent_466225AA599BA49627FB26F707EE17BC5407@xxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/wireless/microchip/wilc1000/hif.c b/drivers/net/wireless/microchip/wilc1000/hif.c
index 3f167bf4eef35..5f363653ed9de 100644
--- a/drivers/net/wireless/microchip/wilc1000/hif.c
+++ b/drivers/net/wireless/microchip/wilc1000/hif.c
@@ -366,6 +366,7 @@ void *wilc_parse_join_bss_param(struct cfg80211_bss *bss,
 	struct wilc_join_bss_param *param;
 	u8 rates_len = 0;
 	int ies_len;
+	u64 ies_tsf;
 	int ret;
 
 	param = kzalloc(sizeof(*param), GFP_KERNEL);
@@ -381,6 +382,7 @@ void *wilc_parse_join_bss_param(struct cfg80211_bss *bss,
 		return NULL;
 	}
 	ies_len = ies->len;
+	ies_tsf = ies->tsf;
 	rcu_read_unlock();
 
 	param->beacon_period = cpu_to_le16(bss->beacon_interval);
@@ -436,7 +438,7 @@ void *wilc_parse_join_bss_param(struct cfg80211_bss *bss,
 				    IEEE80211_P2P_ATTR_ABSENCE_NOTICE,
 				    (u8 *)&noa_attr, sizeof(noa_attr));
 	if (ret > 0) {
-		param->tsf_lo = cpu_to_le32(ies->tsf);
+		param->tsf_lo = cpu_to_le32(ies_tsf);
 		param->noa_enabled = 1;
 		param->idx = noa_attr.index;
 		if (noa_attr.oppps_ctwindow & IEEE80211_P2P_OPPPS_ENABLE_BIT) {




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux