]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mt76: mt7925: drop TXRX_NOTIFY on non-mmio buses
authorDevin Wittmayer <lucid_duck@justthetip.ca>
Sat, 27 Jun 2026 19:13:35 +0000 (12:13 -0700)
committerFelix Fietkau <nbd@nbd.name>
Wed, 22 Jul 2026 06:08:48 +0000 (06:08 +0000)
PKT_TYPE_TXRX_NOTIFY is an mmio-only event, but mt7925_rx_check() and
mt7925_queue_rx_skb() dispatch it to mt7925_mac_tx_free() on every bus.
mt7925_mac_tx_free() cleans the DMA tx queues with
mt76_queue_tx_cleanup(), which calls queue_ops->tx_cleanup(). Only the
mmio queue ops implement that callback; on USB it is NULL, so a
TXRX_NOTIFY there calls a NULL pointer in the RX worker:

  BUG: kernel NULL pointer dereference, address: 0000000000000000
  RIP: 0010:0x0
  Call Trace:
   mt7925_mac_tx_free+0x58/0x350 [mt7925_common]
   mt7925_rx_check+0xe2/0x130 [mt7925_common]
   mt76u_rx_worker+0x1b9/0x620 [mt76_usb]

Drop the event on non-mmio buses via mt76_is_mmio(), as in
commit 5683e1488aa9 ("wifi: mt76: connac: do not check WED status for
non-mmio devices").

Fixes: c948b5da6bbe ("wifi: mt76: mt7925: add Mediatek Wi-Fi7 driver for mt7925 chips")
Cc: stable@vger.kernel.org
Signed-off-by: Devin Wittmayer <lucid_duck@justthetip.ca>
Link: https://patch.msgid.link/20260627191336.20223-3-lucid_duck@justthetip.ca
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7925/mac.c

index 0641a7131d7c7bda76a38a2d321405a80d4f5419..2f9871792ea1c2d0cbc0f336ea7ef0da80b13722 100644 (file)
@@ -1203,8 +1203,9 @@ bool mt7925_rx_check(struct mt76_dev *mdev, void *data, int len)
 
        switch (type) {
        case PKT_TYPE_TXRX_NOTIFY:
-               /* PKT_TYPE_TXRX_NOTIFY can be received only by mmio devices */
-               mt7925_mac_tx_free(dev, data, len); /* mmio */
+               if (!mt76_is_mmio(mdev))
+                       return false;
+               mt7925_mac_tx_free(dev, data, len);
                return false;
        case PKT_TYPE_TXS:
                for (rxd += 4; rxd + 12 <= end; rxd += 12)
@@ -1240,7 +1241,10 @@ void mt7925_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
 
        switch (type) {
        case PKT_TYPE_TXRX_NOTIFY:
-               /* PKT_TYPE_TXRX_NOTIFY can be received only by mmio devices */
+               if (!mt76_is_mmio(mdev)) {
+                       napi_consume_skb(skb, 1);
+                       break;
+               }
                mt7925_mac_tx_free(dev, skb->data, skb->len);
                napi_consume_skb(skb, 1);
                break;