Received: by 2002:a05:6a10:eb17:0:0:0:0 with SMTP id hx23csp488642pxb; Thu, 9 Sep 2021 05:43:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwK18TZHumFLgJbb81gf3x4fHdflIMyIWbBBzWp2DzKqlaYC2pgpbufYYEjrybdurTj1zWh X-Received: by 2002:a92:da49:: with SMTP id p9mr2148675ilq.89.1631191385258; Thu, 09 Sep 2021 05:43:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631191385; cv=none; d=google.com; s=arc-20160816; b=dWqIqufUde3rwi+WzeMi2rhCtwYc71v7pei0m3E/YeG6JG7//2EG2Ntho9D7/NpHmA 92waaKxVGdxoQhb3eAz8L3QG/9+9EpsW265QTn7Ib37er2DAfJHLWAqSyRQRD3ck5jgW Ybkg9rsk4MDMqJcMxwGuv9TKy9XKf+oNvPYw53lVKcwqMokiZ38k9IcpdS7bFw25esO6 CAhZo5qbfMYu+TpMyHEpqM5MoTws9oOSFDiOqpR2V0NbG/GINJ43APMF6KvpdiS1b9od iw3AodHNa3Uu3YKg4Vx1eRU84Q04PRpGljnV7bNn2CmLrzZLdUoPIglwIKWtZZEc/050 ADtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=crLdazqz1wFFvlPDpxLGcuCPJneqn/VNbNkjX7iBEMo=; b=SBfDGo/hHmydFDLZ+4qAgqVaydOBuvfq7UNgzmVf9ngftPXRNYxGkiNpIsVGcWe63x KN11W9laphbyOm5soIDNz7e0cycSOoMBC9xOXoOwAV8IbS7DiKw3Z0vO39O10y8I5Bro 9yyn/8vCiOhAQRkXscslatrF6Wfc2Z1gt4Hqp23/7OApQNpUpc1yrMxeFJ2yPwKlaXsL s96UqNwkvi2QdwuicbWZ7NBBkQYuHV7v5ceCvJmorvDc3U5wMLRg/qjgA+iHju51ocf3 hbrYXSUdW7+FEm9HTM4j+oljErOfyEAF0ChwLXkIRchWlI5cDKs2tBhu3cbkflaCo/pN gujA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=SYLgQKkE; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q17si1740424ilc.49.2021.09.09.05.42.53; Thu, 09 Sep 2021 05:43:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=SYLgQKkE; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354374AbhIIMnR (ORCPT + 99 others); Thu, 9 Sep 2021 08:43:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:45836 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244780AbhIIMg7 (ORCPT ); Thu, 9 Sep 2021 08:36:59 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 68A7761BA5; Thu, 9 Sep 2021 11:54:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1631188452; bh=RPUn723YwuyKp0Qjlf9A2KJKCf03ZrJex2xjJmeSgd0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SYLgQKkEE3nzvtjpgo68nxrAHGFq82ticwS031mDUT1TDHWm8KxvC46YndxJ2yA06 2Oh8UlGwZ0xxBalj0V9GbxIQD+rp5a15Qdvj0u8PC8WuM+/HCyNyVq+tSMyfZ0Xc/j Q1An8wXDjz5+GtOY6K8RBQv5jOXTgpnVdu1gk9AdFs/wF87DVV9azt4NQOjmF7UVZb KGR1kntC3/ynME5W5QyzDXOalEYAVzqeEGHxmRmPAQvv6rty/16vkG8cAG7fAX33dM usMNpuqE/RXQycfsHnP1XxfyRrIDP/TQvw3PhFeNsaLH3Ue/ty++Sti3N8mVbCN6a7 O3dFCvvC/spNw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Chin-Yen Lee , Ping-Ke Shih , Kalle Valo , Sasha Levin , linux-wireless@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH AUTOSEL 5.10 134/176] rtw88: wow: fix size access error of probe request Date: Thu, 9 Sep 2021 07:50:36 -0400 Message-Id: <20210909115118.146181-134-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210909115118.146181-1-sashal@kernel.org> References: <20210909115118.146181-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Chin-Yen Lee [ Upstream commit 69c7044526d984df672b8d9b6d6998c34617cde4 ] Current flow will lead to null ptr access because of trying to get the size of freed probe-request packets. We store the information of packet size into rsvd page instead and also fix the size error issue, which will cause unstable behavoir of sending probe request by wow firmware. Signed-off-by: Chin-Yen Lee Signed-off-by: Ping-Ke Shih Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20210728014335.8785-6-pkshih@realtek.com Signed-off-by: Sasha Levin --- drivers/net/wireless/realtek/rtw88/fw.c | 8 ++++++-- drivers/net/wireless/realtek/rtw88/fw.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c index b2fd87834f23..0452630bcfac 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.c +++ b/drivers/net/wireless/realtek/rtw88/fw.c @@ -684,7 +684,7 @@ static u16 rtw_get_rsvd_page_probe_req_size(struct rtw_dev *rtwdev, continue; if ((!ssid && !rsvd_pkt->ssid) || rtw_ssid_equal(rsvd_pkt->ssid, ssid)) - size = rsvd_pkt->skb->len; + size = rsvd_pkt->probe_req_size; } return size; @@ -912,6 +912,8 @@ static struct sk_buff *rtw_get_rsvd_page_skb(struct ieee80211_hw *hw, ssid->ssid_len, 0); else skb_new = ieee80211_probereq_get(hw, vif->addr, NULL, 0, 0); + if (skb_new) + rsvd_pkt->probe_req_size = (u16)skb_new->len; break; case RSVD_NLO_INFO: skb_new = rtw_nlo_info_get(hw); @@ -1508,6 +1510,7 @@ int rtw_fw_dump_fifo(struct rtw_dev *rtwdev, u8 fifo_sel, u32 addr, u32 size, static void __rtw_fw_update_pkt(struct rtw_dev *rtwdev, u8 pkt_id, u16 size, u8 location) { + struct rtw_chip_info *chip = rtwdev->chip; u8 h2c_pkt[H2C_PKT_SIZE] = {0}; u16 total_size = H2C_PKT_HDR_SIZE + H2C_PKT_UPDATE_PKT_LEN; @@ -1518,6 +1521,7 @@ static void __rtw_fw_update_pkt(struct rtw_dev *rtwdev, u8 pkt_id, u16 size, UPDATE_PKT_SET_LOCATION(h2c_pkt, location); /* include txdesc size */ + size += chip->tx_pkt_desc_sz; UPDATE_PKT_SET_SIZE(h2c_pkt, size); rtw_fw_send_h2c_packet(rtwdev, h2c_pkt); @@ -1527,7 +1531,7 @@ void rtw_fw_update_pkt_probe_req(struct rtw_dev *rtwdev, struct cfg80211_ssid *ssid) { u8 loc; - u32 size; + u16 size; loc = rtw_get_rsvd_page_probe_req_location(rtwdev, ssid); if (!loc) { diff --git a/drivers/net/wireless/realtek/rtw88/fw.h b/drivers/net/wireless/realtek/rtw88/fw.h index 08644540d259..f4aed247e3bd 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.h +++ b/drivers/net/wireless/realtek/rtw88/fw.h @@ -117,6 +117,7 @@ struct rtw_rsvd_page { u8 page; bool add_txdesc; struct cfg80211_ssid *ssid; + u16 probe_req_size; }; enum rtw_keep_alive_pkt_type { -- 2.30.2