[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260102200315.290015-7-zbowling@gmail.com>
Date: Fri, 2 Jan 2026 12:03:15 -0800
From: Zac Bowling <zbowling@...il.com>
To: zbowling@...il.com
Cc: deren.wu@...iatek.com,
kvalo@...nel.org,
linux-kernel@...r.kernel.org,
linux-mediatek@...ts.infradead.org,
linux-wireless@...r.kernel.org,
lorenzo@...nel.org,
nbd@....name,
ryder.lee@...iatek.com,
sean.wang@...iatek.com
Subject: [PATCH] wifi: mt76: mt7925: add NULL checks and error handling for MCU calls
From: Zac Bowling <zac@...bowling.com>
Add NULL pointer checks for mt792x_sta_to_link() and mt792x_vif_to_link()
results in critical paths to prevent kernel crashes during MLO operations.
Add error logging for MCU return values in mt7925_regd_update() to help
diagnose regulatory domain update failures.
Found by static analysis review.
---
drivers/net/wireless/mediatek/mt76/mt7925/init.c | 13 ++++++++++---
drivers/net/wireless/mediatek/mt76/mt7925/main.c | 8 ++++++++
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/init.c b/drivers/net/wireless/mediatek/mt76/mt7925/init.c
index d7d5afe365ed..f800112ccaf7 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/init.c
@@ -162,10 +162,17 @@ void mt7925_regd_update(struct mt792x_dev *dev)
if (!dev->regd_change)
return;
- mt7925_mcu_set_clc(dev, mdev->alpha2, dev->country_ie_env);
+ if (mt7925_mcu_set_clc(dev, mdev->alpha2, dev->country_ie_env) < 0)
+ dev_warn(dev->mt76.dev, "Failed to set CLC\n");
+
mt7925_regd_channel_update(wiphy, dev);
- mt7925_mcu_set_channel_domain(hw->priv);
- mt7925_set_tx_sar_pwr(hw, NULL);
+
+ if (mt7925_mcu_set_channel_domain(hw->priv) < 0)
+ dev_warn(dev->mt76.dev, "Failed to set channel domain\n");
+
+ if (mt7925_set_tx_sar_pwr(hw, NULL) < 0)
+ dev_warn(dev->mt76.dev, "Failed to set TX SAR power\n");
+
dev->regd_change = false;
}
EXPORT_SYMBOL_GPL(mt7925_regd_update);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/main.c b/drivers/net/wireless/mediatek/mt76/mt7925/main.c
index 11c0197c7426..b6e3002faf41 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/main.c
@@ -863,12 +863,17 @@ static int mt7925_mac_link_sta_add(struct mt76_dev *mdev,
msta = (struct mt792x_sta *)link_sta->sta->drv_priv;
mlink = mt792x_sta_to_link(msta, link_id);
+ if (!mlink)
+ return -EINVAL;
idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT792x_WTBL_STA - 1);
if (idx < 0)
return -ENOSPC;
mconf = mt792x_vif_to_link(mvif, link_id);
+ if (!mconf)
+ return -EINVAL;
+
mt76_wcid_init(&mlink->wcid, 0);
mlink->wcid.sta = 1;
mlink->wcid.idx = idx;
@@ -1750,6 +1755,9 @@ mt7925_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
[IEEE80211_AC_BK] = 1,
};
+ if (!mconf)
+ return -EINVAL;
+
/* firmware uses access class index */
mconf->queue_params[mq_to_aci[queue]] = *params;
--
2.51.0
Powered by blists - more mailing lists