]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: ath11k: fix error path leaks in some WMI WOW calls
authorNicolas Escande <nico.escande@gmail.com>
Wed, 6 May 2026 13:42:38 +0000 (15:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jun 2026 15:46:28 +0000 (17:46 +0200)
[ Upstream commit 55dda532bbc261aef495e403c8900c5e2ab5fa34 ]

Fix two instances where we used to directly return the result of
ath11k_wmi_cmd_send(...). Because we did not check the return value, we
also did not free the skb in the error path.

Fixes: 79802b13a492 ("ath11k: implement WoW enable and wakeup commands")
Signed-off-by: Nicolas Escande <nico.escande@gmail.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Reviewed-by: Rameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Link: https://patch.msgid.link/20260506134240.2284016-2-nico.escande@gmail.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/ath/ath11k/wmi.c

index 3b41bc5b125f46e2aebbb5b3a47ef6f118119d58..5f15f7acd51326c76bceb7fda74e58da6246625b 100644 (file)
@@ -9191,6 +9191,7 @@ int ath11k_wmi_wow_host_wakeup_ind(struct ath11k *ar)
        struct wmi_wow_host_wakeup_ind *cmd;
        struct sk_buff *skb;
        size_t len;
+       int ret;
 
        len = sizeof(*cmd);
        skb = ath11k_wmi_alloc_skb(ar->wmi->wmi_ab, len);
@@ -9204,14 +9205,20 @@ int ath11k_wmi_wow_host_wakeup_ind(struct ath11k *ar)
 
        ath11k_dbg(ar->ab, ATH11K_DBG_WMI, "tlv wow host wakeup ind\n");
 
-       return ath11k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID);
+       ret = ath11k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID);
+       if (ret) {
+               ath11k_warn(ar->ab, "failed to send WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID\n");
+               dev_kfree_skb(skb);
+       }
+
+       return ret;
 }
 
 int ath11k_wmi_wow_enable(struct ath11k *ar)
 {
        struct wmi_wow_enable_cmd *cmd;
        struct sk_buff *skb;
-       int len;
+       int ret, len;
 
        len = sizeof(*cmd);
        skb = ath11k_wmi_alloc_skb(ar->wmi->wmi_ab, len);
@@ -9226,7 +9233,13 @@ int ath11k_wmi_wow_enable(struct ath11k *ar)
        cmd->pause_iface_config = WOW_IFACE_PAUSE_ENABLED;
        ath11k_dbg(ar->ab, ATH11K_DBG_WMI, "tlv wow enable\n");
 
-       return ath11k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_ENABLE_CMDID);
+       ret = ath11k_wmi_cmd_send(ar->wmi, skb, WMI_WOW_ENABLE_CMDID);
+       if (ret) {
+               ath11k_warn(ar->ab, "failed to send WMI_WOW_ENABLE_CMDID\n");
+               dev_kfree_skb(skb);
+       }
+
+       return ret;
 }
 
 int ath11k_wmi_scan_prob_req_oui(struct ath11k *ar,