diff mbox series

wifi: rtw89: wow: Add unlock mutex before to return

Message ID 20241001091320.38687-1-alessandro.zanni87@gmail.com (mailing list archive)
State Rejected
Delegated to: Ping-Ke Shih
Headers show
Series wifi: rtw89: wow: Add unlock mutex before to return | expand

Commit Message

Alessandro Zanni Oct. 1, 2024, 9:13 a.m. UTC
In error handling code for "ieee80211_gtk_rekey_add failed", release
the mutex before to return.

Found with Coccinelle static analisys tool,
script: https://coccinelle.gitlabpages.inria.fr/website/rules/mut.cocci

Signed-off-by: Alessandro Zanni <alessandro.zanni87@gmail.com>
---
 drivers/net/wireless/realtek/rtw89/wow.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Ping-Ke Shih Oct. 4, 2024, 4:13 a.m. UTC | #1
Alessandro Zanni <alessandro.zanni87@gmail.com> wrote:
> In error handling code for "ieee80211_gtk_rekey_add failed", release
> the mutex before to return.
> 
> Found with Coccinelle static analisys tool,
> script: https://coccinelle.gitlabpages.inria.fr/website/rules/mut.cocci
> 
> Signed-off-by: Alessandro Zanni <alessandro.zanni87@gmail.com>
> ---
>  drivers/net/wireless/realtek/rtw89/wow.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/net/wireless/realtek/rtw89/wow.c b/drivers/net/wireless/realtek/rtw89/wow.c
> index 86e24e07780d..8045acb27cf9 100644
> --- a/drivers/net/wireless/realtek/rtw89/wow.c
> +++ b/drivers/net/wireless/realtek/rtw89/wow.c
> @@ -624,6 +624,7 @@ static struct ieee80211_key_conf *rtw89_wow_gtk_rekey(struct rtw89_dev *rtwdev,
>         kfree(rekey_conf);
>         if (IS_ERR(key)) {
>                 rtw89_err(rtwdev, "ieee80211_gtk_rekey_add failed\n");
> +               mutex_unlock(&rtwdev->mutex);
>                 return NULL;
>         }

The driver mutex is held across this function. Only unlock before calling 
ieee80211_gtk_rekey_add() and lock after that, because the function enters
driver again and lock mutex again causing deadlock. 

Thus this Coccinelle finding is false alarm. NACK this patch.
diff mbox series

Patch

diff --git a/drivers/net/wireless/realtek/rtw89/wow.c b/drivers/net/wireless/realtek/rtw89/wow.c
index 86e24e07780d..8045acb27cf9 100644
--- a/drivers/net/wireless/realtek/rtw89/wow.c
+++ b/drivers/net/wireless/realtek/rtw89/wow.c
@@ -624,6 +624,7 @@  static struct ieee80211_key_conf *rtw89_wow_gtk_rekey(struct rtw89_dev *rtwdev,
 	kfree(rekey_conf);
 	if (IS_ERR(key)) {
 		rtw89_err(rtwdev, "ieee80211_gtk_rekey_add failed\n");
+		mutex_unlock(&rtwdev->mutex);
 		return NULL;
 	}