• Deren Wu's avatar
    mt76: fix monitor mode crash with sdio driver · 123bc712
    Deren Wu authored
    mt7921s driver may receive frames with fragment buffers. If there is a
    CTS packet received in monitor mode, the payload is 10 bytes only and
    need 6 bytes header padding after RXD buffer. However, only RXD in the
    first linear buffer, if we pull buffer size RXD-size+6 bytes with
    skb_pull(), that would trigger "BUG_ON(skb->len < skb->data_len)" in
    __skb_pull().
    
    To avoid the nonlinear buffer issue, enlarge the RXD size from 128 to
    256 to make sure all MCU operation in linear buffer.
    
    [   52.007562] kernel BUG at include/linux/skbuff.h:2313!
    [   52.007578] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
    [   52.007987] pc : skb_pull+0x48/0x4c
    [   52.008015] lr : mt7921_queue_rx_skb+0x494/0x890 [mt7921_common]
    [   52.008361] Call trace:
    [   52.008377]  skb_pull+0x48/0x4c
    [   52.008400]  mt76s_net_worker+0x134/0x1b0 [mt76_sdio 35339a92c6eb7d4bbcc806a1d22f56365565135c]
    [   52.008431]  __mt76_worker_fn+0xe8/0x170 [mt76 ef716597d11a77150bc07e3fdd68eeb0f9b56917]
    [   52.008449]  kthread+0x148/0x3ac
    [   52.008466]  ret_from_fork+0x10/0x30
    Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
    Signed-off-by: default avatarSean Wang <sean.wang@mediatek.com>
    Signed-off-by: default avatarDeren Wu <deren.wu@mediatek.com>
    Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
    123bc712
mt76.h 34.5 KB