lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 438/879] mt76: mt7921: fix kernel crash at mt7921_pci_remove
    Date
    From: Sean Wang <sean.wang@mediatek.com>

    [ Upstream commit ad483ed9dd5193a54293269c852a29051813b7bd ]

    The crash log shown it is possible that mt7921_irq_handler is called while
    devm_free_irq is being handled so mt76_free_device need to be postponed
    until devm_free_irq is completed to solve the crash we free the mt76 device
    too early.

    [ 9299.339655] BUG: kernel NULL pointer dereference, address: 0000000000000008
    [ 9299.339705] #PF: supervisor read access in kernel mode
    [ 9299.339735] #PF: error_code(0x0000) - not-present page
    [ 9299.339768] PGD 0 P4D 0
    [ 9299.339786] Oops: 0000 [#1] SMP PTI
    [ 9299.339812] CPU: 1 PID: 1624 Comm: prepare-suspend Not tainted 5.15.14-1.fc32.qubes.x86_64 #1
    [ 9299.339863] Hardware name: Xen HVM domU, BIOS 4.14.3 01/20/2022
    [ 9299.339901] RIP: 0010:mt7921_irq_handler+0x1e/0x70 [mt7921e]
    [ 9299.340048] RSP: 0018:ffffa81b80c27cb0 EFLAGS: 00010082
    [ 9299.340081] RAX: 0000000000000000 RBX: ffff98a4cb752020 RCX: ffffffffa96211c5
    [ 9299.340123] RDX: 0000000000000000 RSI: 00000000000d4204 RDI: ffff98a4cb752020
    [ 9299.340165] RBP: ffff98a4c28a62a4 R08: ffff98a4c37a96c0 R09: 0000000080150011
    [ 9299.340207] R10: 0000000040000000 R11: 0000000000000000 R12: ffff98a4c4eaa080
    [ 9299.340249] R13: ffff98a4c28a6360 R14: ffff98a4cb752020 R15: ffff98a4c28a6228
    [ 9299.340297] FS: 00007260840d3740(0000) GS:ffff98a4ef700000(0000) knlGS:0000000000000000
    [ 9299.340345] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 9299.340383] CR2: 0000000000000008 CR3: 0000000004c56001 CR4: 0000000000770ee0
    [ 9299.340432] PKRU: 55555554
    [ 9299.340449] Call Trace:
    [ 9299.340467] <TASK>
    [ 9299.340485] __free_irq+0x221/0x350
    [ 9299.340527] free_irq+0x30/0x70
    [ 9299.340553] devm_free_irq+0x55/0x80
    [ 9299.340579] mt7921_pci_remove+0x2f/0x40 [mt7921e]
    [ 9299.340616] pci_device_remove+0x3b/0xa0
    [ 9299.340651] __device_release_driver+0x17a/0x240
    [ 9299.340686] device_driver_detach+0x3c/0xa0
    [ 9299.340714] unbind_store+0x113/0x130
    [ 9299.340740] kernfs_fop_write_iter+0x124/0x1b0
    [ 9299.340775] new_sync_write+0x15c/0x1f0
    [ 9299.340806] vfs_write+0x1d2/0x270
    [ 9299.340831] ksys_write+0x67/0xe0
    [ 9299.340857] do_syscall_64+0x3b/0x90
    [ 9299.340887] entry_SYSCALL_64_after_hwframe+0x44/0xae

    Fixes: 5c14a5f944b9 ("mt76: mt7921: introduce mt7921e support")
    Reported-by: ThinerLogoer <logoerthiner1@163.com>
    Signed-off-by: Deren Wu <deren.wu@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/mt7921/pci.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    index 062e2b422478..b5fb22b8e086 100644
    --- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    +++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    @@ -119,7 +119,6 @@ static void mt7921e_unregister_device(struct mt7921_dev *dev)
    mt7921_mcu_exit(dev);

    tasklet_disable(&dev->irq_tasklet);
    - mt76_free_device(&dev->mt76);
    }

    static u32 __mt7921_reg_addr(struct mt7921_dev *dev, u32 addr)
    @@ -356,6 +355,7 @@ static void mt7921_pci_remove(struct pci_dev *pdev)

    mt7921e_unregister_device(dev);
    devm_free_irq(&pdev->dev, pdev->irq, dev);
    + mt76_free_device(&dev->mt76);
    pci_free_irq_vectors(pdev);
    }

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 02:18    [W:2.133 / U:0.448 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site