Skip to content

Commit aa4a31c

Browse files
stonezdmgregkh
authored andcommitted
wifi: mt76: mt7996: fix use-after-free bugs in mt7996_mac_dump_work()
[ Upstream commit c8f62f7 ] When the mt7996 pci chip is detaching, the mt7996_crash_data is released in mt7996_coredump_unregister(). However, the work item dump_work may still be running or pending, leading to UAF bugs when the already freed crash_data is dereferenced again in mt7996_mac_dump_work(). The race condition can occur as follows: CPU 0 (removal path) | CPU 1 (workqueue) mt7996_pci_remove() | mt7996_sys_recovery_set() mt7996_unregister_device() | mt7996_reset() mt7996_coredump_unregister() | queue_work() vfree(dev->coredump.crash_data) | mt7996_mac_dump_work() | crash_data-> // UAF Fix this by ensuring dump_work is properly canceled before the crash_data is deallocated. Add cancel_work_sync() in mt7996_unregister_device() to synchronize with any pending or executing dump work. Fixes: 878161d ("wifi: mt76: mt7996: enable coredump support") Signed-off-by: Duoming Zhou <duoming@zju.edu.cn> Link: https://patch.msgid.link/20260131024731.18741-1-duoming@zju.edu.cn Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 6b7cbb1 commit aa4a31c

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

  • drivers/net/wireless/mediatek/mt76/mt7996

drivers/net/wireless/mediatek/mt76/mt7996/init.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1732,6 +1732,7 @@ int mt7996_register_device(struct mt7996_dev *dev)
17321732

17331733
void mt7996_unregister_device(struct mt7996_dev *dev)
17341734
{
1735+
cancel_work_sync(&dev->dump_work);
17351736
cancel_work_sync(&dev->wed_rro.work);
17361737
mt7996_unregister_phy(mt7996_phy3(dev));
17371738
mt7996_unregister_phy(mt7996_phy2(dev));

0 commit comments

Comments
 (0)