From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Kuan-Chung Chen <damon.chen@realtek.com>,
Ping-Ke Shih <pkshih@realtek.com>,
Sasha Levin <sashal@kernel.org>,
linux-wireless@vger.kernel.org
Subject: [PATCH AUTOSEL 6.18-6.1] wifi: rtw89: phy: fix out-of-bounds access in rtw89_phy_read_txpwr_limit()
Date: Mon, 8 Dec 2025 19:15:30 -0500 [thread overview]
Message-ID: <20251209001610.611575-38-sashal@kernel.org> (raw)
In-Reply-To: <20251209001610.611575-1-sashal@kernel.org>
From: Kuan-Chung Chen <damon.chen@realtek.com>
[ Upstream commit 1dd7e743dd37361c8c1ac89355a8da738e2b81fb ]
Coverity reported a potential out-of-bounds access when 'bw' exceeds the
valid range for the specified band. Add a helper `rtw89_bw_is_valid()`
to check bandwidth validity for each band before accessing limit tables.
Addresses-Coverity-ID: 1598844 ("Out-of-bounds access")
Addresses-Coverity-ID: 1598896 ("Out-of-bounds access")
Signed-off-by: Kuan-Chung Chen <damon.chen@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20251111022452.28093-6-pkshih@realtek.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
## Analysis of Commit for Stable Backport
### 1. COMMIT MESSAGE ANALYSIS
- **Subject:** Clearly indicates a bug fix - "fix out-of-bounds access"
- **Bug Type:** Out-of-bounds array access (memory safety issue)
- **Source:** Coverity static analysis (IDs 1598844, 1598896)
- **No "Cc: stable@vger.kernel.org"** tag present
- **No "Fixes:" tag** pointing to original buggy commit
### 2. CODE CHANGE ANALYSIS
**The Bug:**
The function `rtw89_phy_read_txpwr_limit()` uses the `bw` (bandwidth)
parameter as an array index in expressions like:
```c
da_lmt = (*rule_da_2ghz->lmt)[bw][ntx][rs][bf][regd][ch_idx];
lmt = (*rule_2ghz->lmt)[bw][ntx][rs][bf][regd][ch_idx];
```
Different bands (2G, 5G, 6G) have different valid bandwidth ranges
(`RTW89_2G_BW_NUM`, `RTW89_5G_BW_NUM`, `RTW89_6G_BW_NUM`). If `bw`
exceeds the valid range for the specified band, an out-of-bounds array
read occurs.
**The Fix:**
1. Adds a new helper function `rtw89_phy_validate_txpwr_limit_bw()` that
validates bandwidth against band-specific limits
2. Adds a validation check at the beginning of
`rtw89_phy_read_txpwr_limit()` that returns 0 (safe default) if
validation fails
**Technical Correctness:**
The fix is straightforward - validate input before using it as array
index. This is a defensive programming pattern that prevents OOB access.
### 3. CLASSIFICATION
- **Bug fix:** Yes - fixes memory safety bug (OOB read)
- **Feature addition:** No
- **Security relevant:** Potentially - OOB access can cause crashes,
kernel panics, or information leaks
### 4. SCOPE AND RISK ASSESSMENT
| Factor | Assessment |
|--------|------------|
| Lines changed | ~20 lines added |
| Files touched | 1 file (phy.c) |
| Complexity | Low - simple validation check |
| Regression risk | Very low - only adds validation, no behavioral
change for valid inputs |
| Subsystem | rtw89 WiFi driver (Realtek 802.11ax) |
The change is **small and surgical**. It only adds bounds checking and
returns a safe default (0) for invalid inputs. Normal operation is
completely unaffected.
### 5. USER IMPACT
- **Affected users:** Users with Realtek rtw89 WiFi hardware
- **Severity if triggered:** Kernel crash/oops or potential information
leak
- **Trigger conditions:** Invalid `bw` value exceeding band-specific
limits
- **Real-world likelihood:** Uncertain - could be triggered by malformed
firmware/hardware responses or bugs elsewhere in the driver
### 6. STABILITY INDICATORS
- Signed-off by Realtek engineers (maintainer-level confidence)
- No explicit tested-by or reviewed-by tags visible
- Has proper patch link for traceability
### 7. DEPENDENCY CHECK
The fix uses existing constants (`RTW89_*_BW_NUM`) that should exist in
any stable kernel with the rtw89 driver. The rtw89 driver was introduced
in kernel 5.16, so this applies to 6.1.y, 6.6.y, and newer stable
branches.
### DECISION RATIONALE
**For backporting:**
- Fixes a genuine memory safety bug (OOB array access)
- Small, self-contained fix with minimal regression risk
- Defensive in nature - only affects invalid input handling
- OOB access bugs can have security implications
**Against backporting:**
- No explicit "Cc: stable" tag from maintainers
- Coverity-found vs user-reported (no evidence of actual crashes in the
wild)
- No "Fixes:" tag to identify the original buggy commit
**Verdict:**
Despite the lack of explicit stable tags, this is a legitimate memory
safety fix that:
1. Is obviously correct and small
2. Fixes a real bug (OOB access)
3. Has no risk of regression for valid code paths
4. Could prevent crashes or security issues
The fix meets stable kernel criteria: it's a small, self-contained bug
fix that addresses a real memory safety issue without changing normal
behavior. Out-of-bounds access bugs are the type of issues stable trees
should protect against.
**YES**
drivers/net/wireless/realtek/rtw89/phy.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtw89/phy.c b/drivers/net/wireless/realtek/rtw89/phy.c
index ba7feadd75828..e8960fbcb72db 100644
--- a/drivers/net/wireless/realtek/rtw89/phy.c
+++ b/drivers/net/wireless/realtek/rtw89/phy.c
@@ -2339,6 +2339,21 @@ static u8 rtw89_channel_to_idx(struct rtw89_dev *rtwdev, u8 band, u8 channel)
}
}
+static bool rtw89_phy_validate_txpwr_limit_bw(struct rtw89_dev *rtwdev,
+ u8 band, u8 bw)
+{
+ switch (band) {
+ case RTW89_BAND_2G:
+ return bw < RTW89_2G_BW_NUM;
+ case RTW89_BAND_5G:
+ return bw < RTW89_5G_BW_NUM;
+ case RTW89_BAND_6G:
+ return bw < RTW89_6G_BW_NUM;
+ default:
+ return false;
+ }
+}
+
s8 rtw89_phy_read_txpwr_limit(struct rtw89_dev *rtwdev, u8 band,
u8 bw, u8 ntx, u8 rs, u8 bf, u8 ch)
{
@@ -2363,6 +2378,11 @@ s8 rtw89_phy_read_txpwr_limit(struct rtw89_dev *rtwdev, u8 band,
};
s8 cstr;
+ if (!rtw89_phy_validate_txpwr_limit_bw(rtwdev, band, bw)) {
+ rtw89_warn(rtwdev, "invalid band %u bandwidth %u\n", band, bw);
+ return 0;
+ }
+
switch (band) {
case RTW89_BAND_2G:
if (has_ant_gain)
--
2.51.0
next prev parent reply other threads:[~2025-12-09 0:18 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20251209001610.611575-1-sashal@kernel.org>
2025-12-09 0:14 ` [PATCH AUTOSEL 6.18-6.17] wifi: rtw89: use skb_dequeue() for queued ROC packets to prevent racing Sasha Levin
2025-12-09 0:15 ` [PATCH AUTOSEL 6.18-6.12] wifi: mac80211: reset CRC valid after CSA Sasha Levin
2025-12-09 0:15 ` [PATCH AUTOSEL 6.18-5.10] wifi: mt76: mmio_*_copy fix byte order and alignment Sasha Levin
2025-12-09 0:15 ` [PATCH AUTOSEL 6.18-6.12] wifi: rtl8xxxu: Fix HT40 channel config for RTL8192CU, RTL8723AU Sasha Levin
2025-12-09 0:15 ` [PATCH AUTOSEL 6.18-6.17] wifi: rtw89: rtw8852bu: Added dev id for ASUS AX57 NANO USB Wifi dongle Sasha Levin
2025-12-09 0:15 ` [PATCH AUTOSEL 6.18-6.17] wifi: rtw88: Add BUFFALO WI-U3-866DHP to the USB ID list Sasha Levin
2025-12-09 0:15 ` Sasha Levin [this message]
2025-12-09 0:15 ` [PATCH AUTOSEL 6.18-6.1] wifi: rtw89: flush TX queue before deleting key Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251209001610.611575-38-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=damon.chen@realtek.com \
--cc=linux-wireless@vger.kernel.org \
--cc=patches@lists.linux.dev \
--cc=pkshih@realtek.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).