From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9ADE1C84D7; Wed, 4 Jun 2025 00:55:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748998513; cv=none; b=CdryYAa4lgAQnYJRBRCjFKnfHhRiOarVRMmHi71lMNfZV4iW19Uhh8F3PmGw6VpA9AB3+4BK+OQwcmZWDE4FFdHb1n/Ok6di2n87qOu9EKiu6Y2zFh1/yl0VucLl9qpRxB088CKEgDDHr+PGZ4dzKYp5y1ttT5VPSMgeQcneAhs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748998513; c=relaxed/simple; bh=JRCPV5TLe9nMSdirU6UEF3EssrOhd5X+kUZC9mgWYl4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=l+hZDHs3weN+UfugF9FZf9KnNcRqnCYGWu18xDneRf5qpBn6zYAHTVaSseRYqls1tb4LbPqZA+6ql8NOqjyyAMqarT/mU5MoUI7Q2U1XxexIq1Y6gLjjSsVVa5EiK7XHaPsQl88eR2O05C8ccfp0kqjxEnbeq8MAtOD6veFiIvU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lHYnNmQ4; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lHYnNmQ4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D2FBDC4CEEF; Wed, 4 Jun 2025 00:55:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748998513; bh=JRCPV5TLe9nMSdirU6UEF3EssrOhd5X+kUZC9mgWYl4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lHYnNmQ4vms3JhQvf7gunPjSS4nIDVMQxmnhs8dCx9SDGg3/CEWAlHJCHY0gjy4K2 HlPFQj7wHMzpYWNHjKIAJg590+lvlfL4K/+9uFa9e1292KeR7kc+vEKP3Ik0BWOlZT +fSNGglt7IK0DkVa4VItRxVwUA1NF2EB4O+f+c43LhoWQgIob6QTJI53lPlsq/FuU7 pu+bZBmSK6QWs1wXs2ezWs/aZjQ25Mhx9fZB9G0l7gRySC1CNeNuyGiImwIFDjuyWj 7jw58mRdm2rJYcMW66BVYsddxnB4R6MmDpKmbQZ7Kib3bI1+sU9gfAFTFbd4gVK0zA xGWImk0aKuYcQ== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Hari Chandrakanthan , Nicolas Escande , Vasanthakumar Thiagarajan , Karthikeyan Periyasamy , Jeff Johnson , Sasha Levin , jjohnson@kernel.org, linux-wireless@vger.kernel.org, ath12k@lists.infradead.org Subject: [PATCH AUTOSEL 6.15 115/118] wifi: ath12k: fix link valid field initialization in the monitor Rx Date: Tue, 3 Jun 2025 20:50:46 -0400 Message-Id: <20250604005049.4147522-115-sashal@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250604005049.4147522-1-sashal@kernel.org> References: <20250604005049.4147522-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.15 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Hari Chandrakanthan [ Upstream commit 2826139f9295821fe2b049318a1cc057ec003131 ] Currently, the link_valid field is not initialized in the monitor Rx path. This can result in random values for the link_valid and link_id leads to undefined behaviour in mac80211. Therefore, initialize the link_valid field in the monitor Rx path. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 Signed-off-by: Hari Chandrakanthan Tested-by: Nicolas Escande Reviewed-by: Vasanthakumar Thiagarajan Signed-off-by: Karthikeyan Periyasamy Link: https://patch.msgid.link/20250324062518.2752822-2-quic_periyasa@quicinc.com Signed-off-by: Jeff Johnson Signed-off-by: Sasha Levin --- Based on my analysis of the commit and the code context, here is my assessment: **YES** This commit should be backported to stable kernel trees. Here's my extensive analysis: ## Technical Analysis **Code Change Impact:** The commit adds a single line `status->link_valid = 0;` at the beginning of the `ath12k_dp_mon_rx_deliver_msdu()` function in the monitor Rx path. This initializes the `link_valid` field in the `ieee80211_rx_status` structure before any subsequent processing. **Root Cause and Problem:** 1. **Uninitialized Memory Issue**: The `ieee80211_rx_status` structure contains the `link_valid` field (1 bit) and `link_id` field (4 bits) that were not being initialized in the monitor Rx path. 2. **Undefined Behavior**: Without initialization, these fields contain random stack memory values, which can cause unpredictable behavior in mac80211 when it processes received frames. 3. **MLO Context**: The `link_valid` and `link_id` fields are specifically used for Multi-Link Operation (MLO) in WiFi 7, where mac80211 needs to know which link a frame was received on. ## Why This Should Be Backported **1. Bug Fix Nature:** - This is clearly a bug fix that addresses undefined behavior caused by uninitialized fields - The commit message explicitly states this fixes "undefined behaviour in mac80211" - Similar to reference commit #2 (which was backported) that fixed uninitialized variables **2. User Impact:** - Uninitialized fields can cause mac80211 to make incorrect decisions about packet processing - May lead to packet drops, incorrect link handling, or other unpredictable wireless behavior - Monitor mode is commonly used by network analysis tools, making this user-facing **3. Risk Assessment:** - **Very Low Risk**: The change is minimal (single line initialization) - **No Side Effects**: Setting `link_valid = 0` is the correct default for monitor mode - **Safe Change**: Only affects the monitor Rx path, doesn't change core functionality **4. Code Pattern Consistency:** Looking at the regular Rx path in `dp_rx.c`, I can see the same pattern: ```c if (pubsta && pubsta->valid_links) { status->link_valid = 1; status->link_id = peer->link_id; } ``` The monitor path was missing the corresponding initialization, creating an inconsistency where: - Regular Rx path: Properly sets `link_valid = 1` when appropriate - Monitor Rx path: Left `link_valid` uninitialized (now fixed to `link_valid = 0`) **5. Containment:** - Change is confined to a single function in the monitor path - No architectural changes or new feature additions - Follows established kernel practices for field initialization **6. Stable Tree Criteria Match:** - ✅ Important bug fix (undefined behavior) - ✅ Minimal risk of regression - ✅ Small, contained change - ✅ No new features - ✅ Affects user-facing functionality (monitor mode) **7. Reference Precedent:** This follows the same pattern as the backported commit #2 which fixed uninitialized variables and commit #3 which fixed incorrect field usage, both of which were deemed suitable for backporting. The commit properly addresses a real bug that could affect users of monitor mode with ath12k WiFi 7 devices, with virtually no risk of introducing regressions. drivers/net/wireless/ath/ath12k/dp_mon.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireless/ath/ath12k/dp_mon.c index d22800e894850..b1350e60e2131 100644 --- a/drivers/net/wireless/ath/ath12k/dp_mon.c +++ b/drivers/net/wireless/ath/ath12k/dp_mon.c @@ -1970,6 +1970,8 @@ static void ath12k_dp_mon_rx_deliver_msdu(struct ath12k *ar, struct napi_struct bool is_mcbc = rxcb->is_mcbc; bool is_eapol_tkip = rxcb->is_eapol; + status->link_valid = 0; + if ((status->encoding == RX_ENC_HE) && !(status->flag & RX_FLAG_RADIOTAP_HE) && !(status->flag & RX_FLAG_SKIP_MONITOR)) { he = skb_push(msdu, sizeof(known)); -- 2.39.5