lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 508/800] mt76: mt7921: fix the coredump is being truncated
    Date
    From: Sean Wang <sean.wang@mediatek.com>

    [ Upstream commit 723885a6750102e5d807429b3d06aa6b0d29cc66 ]

    Fix the maximum size of the coredump generated with current mt7921
    firmware. Otherwise, a truncated coredump would be reported to userland
    via dev_coredumpv.

    Also, there is an additional error handling enhanced in the patch to avoid
    the possible invalid buffer access when the system failed to create the
    buffer to hold the coredump.

    Fixes: 0da3c795d07b ("mt76: mt7921: add coredump support")
    Co-developed-by: YN Chen <YN.Chen@mediatek.com>
    Signed-off-by: YN Chen <YN.Chen@mediatek.com>
    Signed-off-by: Sean Wang <sean.wang@mediatek.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/mediatek/mt76/mt76_connac.h | 2 +-
    drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 9 ++++++---
    2 files changed, 7 insertions(+), 4 deletions(-)

    diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
    index 63c1d1a68a70..c26cfef425ed 100644
    --- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
    +++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
    @@ -12,7 +12,7 @@
    #define MT76_CONNAC_MAX_SCAN_MATCH 16

    #define MT76_CONNAC_COREDUMP_TIMEOUT (HZ / 20)
    -#define MT76_CONNAC_COREDUMP_SZ (128 * 1024)
    +#define MT76_CONNAC_COREDUMP_SZ (1300 * 1024)

    enum {
    CMD_CBW_20MHZ = IEEE80211_STA_RX_BW_20,
    diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
    index 853db0a52181..493c2aba2f79 100644
    --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
    +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
    @@ -1504,7 +1504,7 @@ void mt7921_coredump_work(struct work_struct *work)
    break;

    skb_pull(skb, sizeof(struct mt7921_mcu_rxd));
    - if (data + skb->len - dump > MT76_CONNAC_COREDUMP_SZ) {
    + if (!dump || data + skb->len - dump > MT76_CONNAC_COREDUMP_SZ) {
    dev_kfree_skb(skb);
    continue;
    }
    @@ -1514,7 +1514,10 @@ void mt7921_coredump_work(struct work_struct *work)

    dev_kfree_skb(skb);
    }
    - dev_coredumpv(dev->mt76.dev, dump, MT76_CONNAC_COREDUMP_SZ,
    - GFP_KERNEL);
    +
    + if (dump)
    + dev_coredumpv(dev->mt76.dev, dump, MT76_CONNAC_COREDUMP_SZ,
    + GFP_KERNEL);
    +
    mt7921_reset(&dev->mt76);
    }
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 10:41    [W:4.032 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site