From nobody Mon Feb 9 15:09:53 2026 Received: from mail-dy1-f170.google.com (mail-dy1-f170.google.com [74.125.82.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E120B3242D8 for ; Fri, 16 Jan 2026 01:05:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768525554; cv=none; b=ZtNGEuBFCvs1er/6tQwZtJv8AbEGP8pdlO++fT4nNcJGAM/sTcZlw+iHN0oz/ND3sWPI/f1SVi8J2gi5gaUQGdHEUdP4Ww1T8xiQECwZBNgHbFTWJS7ztwu9OlP/qBNeGy0hJtM9qF6R5MQcR49ZrrIxZqQo9SMOPm6WRrL5Fbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768525554; c=relaxed/simple; bh=HaKBfzs+vbqcZU4vZwpXtkvIH+Urmp8bT+Ano+LNPMs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S60wyXilgCaacASUVeJGIWVtNK4UNk2tbe4CxBfVJJ+y4Nhs9GXsvJS9cAw/eANEdfFhC1/cX2iUNaQEa9nPm2hWMxioVK7Y7DH4kl+KfQQrEo/zzGAnpW4k6jUk4QZjD7DPn+YvdA0HT8nXruhhuxxoep+9nD+GIohSOW7MBI8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=zacbowling.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=apD8G5Go; arc=none smtp.client-ip=74.125.82.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=zacbowling.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="apD8G5Go" Received: by mail-dy1-f170.google.com with SMTP id 5a478bee46e88-2b6b0500e06so914449eec.1 for ; Thu, 15 Jan 2026 17:05:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768525550; x=1769130350; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=uzEynkgBJi1NWbI0Fd8DGgsgD9GPNNMBHOPHCo9YUDo=; b=apD8G5GowbiIhoVY8FDpNQoUbI0ZPVfE2UbF1MYEG3l17kC78fXDjjLv1VqugTRb3Z hJYjEGoCdtFtxYPF85aUQ1dQ5nmH6Tx8hSVWMatl7TtjsS32JGTw6ZAPtveKsrfvV5Wp TX76ft2MsuaFrsS5fL29aiyQZXSNlgSWW2/+xnGra3jHsD6xJMS1Z0zHhVWSDvE98tnJ F31OsMRbIAFEvu4p3akqxWyP+/1Wabqgf+giCn2G2JewW40q6FVH5AmDTjQhtqZgzmJx tE0eQl06zfc/bagqjTlGcyVTRgzj3aRMZkSIi3S7kYsEBjxm++9AXqRrveXuO9HZevez XCPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768525550; x=1769130350; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uzEynkgBJi1NWbI0Fd8DGgsgD9GPNNMBHOPHCo9YUDo=; b=BIs9Hnpeiqd7kexmUY+PWD/TbFVKWvjskrsI9JIHB6JlkrxP2sGcDMZ/vpcN4hmQ2c N0Mt0n9iI/LQOWDqD1ZVh1qv2XXhujpmvKXYoIPXyw58c5pC5J8aL2uxgPc186nxuiF5 gdQnXXSjRVfzmujP+msaKzA+KYFBgQETVDlQ49/5/eatMUXCzOYBX1qHZ8cLrvDfKTPa t+0uyO8CmlrvRwuFKL0sx9rDLKo3fIPc/+2HliLpSvlIdQmzWza5kotf7DTJKwzxLTHA 98HeHAH2K045cUHCki0Q2qDJ/rG+a0Nzo46Hx5s4g4JvOKYiobOUC9KEJZMF79ADllEi XC9Q== X-Forwarded-Encrypted: i=1; AJvYcCW4C/Mi/5H0caQC288JZQhUcpKGD9skxQYUciBmGrca1fVREZIrL+GF29yOhhSQG3WTV4VdiTc8hmgDxe4=@vger.kernel.org X-Gm-Message-State: AOJu0YzUFbqP2YITh97rW1mSQY0OiYkAjOr43s3T8MkiVg8ZrI6BslhV l0kPTmCbXKmt6W07xCCX1WwRKuOqSJAJQVNWsweSvnycYz7YZxzzxMLavQ9oB6Ty X-Gm-Gg: AY/fxX5kPL8hoQSMlBSb6Fg1+jot0v2l+4TSRfWjq8mflHJM1P+zAzJJ55F7mTml2ku rG0MMS94qrZ287lVO0oeyg3jJb9quPhUrkIeaXv6N68P3B+wvwfSBxAyc8AfRkTD4pJBUOyJVUx aaR8TxDqDHbKjSveXv92tmLKpav8B18s5pBxEM9NKZg9jQBRkHqm6qJ3ZGu60MgWXh+hdux0jck iw3BARZ2/Gla8AQvScnlvBnjD+ft93oqLhzXmPKHYdokDbLMlQoZGKuz6giqp0xsPvkBQizLeNf Eit4dcLYhlYVi1ErstADrRC/l4gh0LdcGxPPjcveXzEnK5LepdfXjH2C24JGu6oldPyDnviW+XX 3j9W8x+DRjw6VvKaVZZPztYFXrtvJl4375tzhFykbQu5mBmh4Ldi3zEp3n2wg3OscJ3p5avkCmp 6ZSbOJfeNZ4dP8RIAVmqXghoN2rGjylgVl5PQsLmoqTSF+Ff3RzJ3Zehpds3Tfdw== X-Received: by 2002:a05:7301:678f:b0:2b0:4fe2:6a2e with SMTP id 5a478bee46e88-2b6b3f05fd8mr1663499eec.9.1768525549846; Thu, 15 Jan 2026 17:05:49 -0800 (PST) Received: from zcache.home.zacbowling.com ([2001:5a8:60d:bc9:f1d2:502c:a6ff:5556]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b6b367cbc9sm1019884eec.32.2026.01.15.17.05.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 17:05:49 -0800 (PST) Sender: Zac Bowling From: Zac To: sean.wang@kernel.org Cc: deren.wu@mediatek.com, kvalo@kernel.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-wireless@vger.kernel.org, lorenzo@kernel.org, nbd@nbd.name, linux@frame.work, ryder.lee@mediatek.com, sean.wang@mediatek.com, Zac Subject: [PATCH v4 18/21] wifi: mt76: mt7921: fix missing mutex protection in multiple paths Date: Thu, 15 Jan 2026 17:05:16 -0800 Message-ID: <20260116010519.37001-19-zac@zacbowling.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260116010519.37001-1-zac@zacbowling.com> References: <20260116010519.37001-1-zac@zacbowling.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add mt792x_mutex_acquire/release around ieee80211_iterate_*() calls in MT7921 driver to prevent race conditions: - mt7921_roc_abort_sync(): protect ROC abort iteration - mt7921_set_runtime_pm(): protect runtime PM iteration - mt7921_regd_set_6ghz_power_type(): protect 6GHz power type iteration - mt7921_mac_reset_work(): protect vif reconnect iteration after reset These paths were missing the mutex protection that is required when calling ieee80211_iterate_* functions with ITER_RESUME_ALL flag. Signed-off-by: Zac Bowling --- drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 2 ++ drivers/net/wireless/mediatek/mt76/mt7921/main.c | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/= wireless/mediatek/mt76/mt7921/mac.c index 03b4960db7..f5c882e45b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c @@ -693,9 +693,11 @@ void mt7921_mac_reset_work(struct work_struct *work) clear_bit(MT76_RESET, &dev->mphy.state); pm->suspended =3D false; ieee80211_wake_queues(hw); + mt792x_mutex_acquire(dev); ieee80211_iterate_active_interfaces(hw, IEEE80211_IFACE_ITER_RESUME_ALL, mt7921_vif_connect_iter, NULL); + mt792x_mutex_release(dev); mt76_connac_power_save_sched(&dev->mt76.phy, pm); } =20 diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net= /wireless/mediatek/mt76/mt7921/main.c index 5fae9a6e27..8fc3770d1b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c @@ -373,10 +373,13 @@ void mt7921_roc_abort_sync(struct mt792x_dev *dev) =20 timer_delete_sync(&phy->roc_timer); cancel_work_sync(&phy->roc_work); - if (test_and_clear_bit(MT76_STATE_ROC, &phy->mt76->state)) + if (test_and_clear_bit(MT76_STATE_ROC, &phy->mt76->state)) { + mt792x_mutex_acquire(dev); ieee80211_iterate_interfaces(mt76_hw(dev), IEEE80211_IFACE_ITER_RESUME_ALL, mt7921_roc_iter, (void *)phy); + mt792x_mutex_release(dev); + } } EXPORT_SYMBOL_GPL(mt7921_roc_abort_sync); =20 @@ -619,9 +622,11 @@ void mt7921_set_runtime_pm(struct mt792x_dev *dev) bool monitor =3D !!(hw->conf.flags & IEEE80211_CONF_MONITOR); =20 pm->enable =3D pm->enable_user && !monitor; + mt792x_mutex_acquire(dev); ieee80211_iterate_active_interfaces(hw, IEEE80211_IFACE_ITER_RESUME_ALL, mt7921_pm_interface_iter, dev); + mt792x_mutex_release(dev); pm->ds_enable =3D pm->ds_enable_user && !monitor; mt76_connac_mcu_set_deep_sleep(&dev->mt76, pm->ds_enable); } @@ -765,9 +770,11 @@ mt7921_regd_set_6ghz_power_type(struct ieee80211_vif *= vif, bool is_add) struct mt792x_dev *dev =3D phy->dev; u32 valid_vif_num =3D 0; =20 + mt792x_mutex_acquire(dev); ieee80211_iterate_active_interfaces(mt76_hw(dev), IEEE80211_IFACE_ITER_RESUME_ALL, mt7921_calc_vif_num, &valid_vif_num); + mt792x_mutex_release(dev); =20 if (valid_vif_num > 1) { phy->power_type =3D MT_AP_DEFAULT; --=20 2.52.0