]> git.ipfire.org Git - thirdparty/kernel/linux.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)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Tue, 12 May 2026 13:54:20 +0000 (06:54 -0700)
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>
drivers/net/wireless/ath/ath11k/wmi.c

index 40747fba3b0c07cb21a8b2cb7285a8845a7799b3..024c2aad9fb4e46d53547261414e0073bc1de786 100644 (file)
@@ -9332,6 +9332,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);
@@ -9345,14 +9346,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);
@@ -9367,7 +9374,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,