mac80211: avoid crashing on invalid band info
authorDavid Bauer <mail@david-bauer.net>
Thu, 30 Nov 2023 06:32:52 +0000 (07:32 +0100)
committerDavid Bauer <mail@david-bauer.net>
Tue, 9 Jan 2024 01:09:53 +0000 (02:09 +0100)
Frequent crashes have been observed on MT7916 based platforms. While the
root of these crashes are currently unknown, they happen when decoding
rate information of connected STAs in AP mode. The rate-information is
associated with a band which is not available on the PHY.

Check for this condition in order to avoid crashing the whole system.
This patch should be removed once the roout cause has been found and
fixed.

Link: https://github.com/freifunk-gluon/gluon/issues/2980
Signed-off-by: David Bauer <mail@david-bauer.net>
(cherry picked from commit 1278d47beaabaa963b2956e81936269b7fea4003)

package/kernel/mac80211/patches/subsys/780-avoid-crashing-missing-band.patch [new file with mode: 0644]

diff --git a/package/kernel/mac80211/patches/subsys/780-avoid-crashing-missing-band.patch b/package/kernel/mac80211/patches/subsys/780-avoid-crashing-missing-band.patch
new file mode 100644 (file)
index 0000000..2bc11ef
--- /dev/null
@@ -0,0 +1,34 @@
+From: David Bauer <mail@david-bauer.net>
+Date: Thu, 30 Nov 2023 07:32:52 +0100
+Subject: [PATCH] mac80211: avoid crashing on invalid band info
+
+Frequent crashes have been observed on MT7916 based platforms. While the
+root of these crashes are currently unknown, they happen when decoding
+rate information of connected STAs in AP mode. The rate-information is
+associated with a band which is not available on the PHY.
+
+Check for this condition in order to avoid crashing the whole system.
+This patch should be removed once the roout cause has been found and
+fixed.
+
+Link: https://github.com/freifunk-gluon/gluon/issues/2980
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+
+--- a/net/mac80211/sta_info.c
++++ b/net/mac80211/sta_info.c
+@@ -2422,6 +2422,13 @@ static void sta_stats_decode_rate(struct
+               sband = local->hw.wiphy->bands[band];
++              if (!sband) {
++                      wiphy_warn(local->hw.wiphy,
++                                  "Invalid band %d\n",
++                                  band);
++                      break;
++              }
++
+               if (WARN_ON_ONCE(!sband->bitrates))
+                       break;