Skip to content

Commit 8a89c92

Browse files
mt76: mt7921: fix kernel panic by accessing unallocated eeprom.data
jira VULN-154549 cve CVE-2023-53232 commit-author Sean Wang <[email protected]> commit 12db28c The MT7921 driver no longer uses eeprom.data, but the relevant code has not been removed completely since commit 16d98b5 ("mt76: mt7921: rely on mcu_get_nic_capability"). This could result in potential invalid memory access. To fix the kernel panic issue in mt7921, it is necessary to avoid accessing unallocated eeprom.data which can lead to invalid memory access. Furthermore, it is possible to entirely eliminate the mt7921_mcu_parse_eeprom function and solely depend on mt7921_mcu_parse_response to divide the RxD header. [2.702735] BUG: kernel NULL pointer dereference, address: 0000000000000550 [2.702740] #PF: supervisor write access in kernel mode [2.702741] #PF: error_code(0x0002) - not-present page [2.702743] PGD 0 P4D 0 [2.702747] Oops: 0002 [#1] PREEMPT SMP NOPTI [2.702755] RIP: 0010:mt7921_mcu_parse_response+0x147/0x170 [mt7921_common] [2.702758] RSP: 0018:ffffae7c00fef828 EFLAGS: 00010286 [2.702760] RAX: ffffa367f57be024 RBX: ffffa367cc7bf500 RCX: 0000000000000000 [2.702762] RDX: 0000000000000550 RSI: 0000000000000000 RDI: ffffa367cc7bf500 [2.702763] RBP: ffffae7c00fef840 R08: ffffa367cb167000 R09: 0000000000000005 [2.702764] R10: 0000000000000000 R11: ffffffffc04702e4 R12: ffffa367e8329f40 [2.702766] R13: 0000000000000000 R14: 0000000000000001 R15: ffffa367e8329f40 [2.702768] FS: 000079ee6cf20c40(0000) GS:ffffa36b2f940000(0000) knlGS:0000000000000000 [2.702769] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [2.702775] CR2: 0000000000000550 CR3: 00000001233c6004 CR4: 0000000000770ee0 [2.702776] PKRU: 55555554 [2.702777] Call Trace: [2.702782] mt76_mcu_skb_send_and_get_msg+0xc3/0x11e [mt76 <HASH:1bc4 5>] [2.702785] mt7921_run_firmware+0x241/0x853 [mt7921_common <HASH:6a2f 6>] [2.702789] mt7921e_mcu_init+0x2b/0x56 [mt7921e <HASH:d290 7>] [2.702792] mt7921_register_device+0x2eb/0x5a5 [mt7921_common <HASH:6a2f 6>] [2.702795] ? mt7921_irq_tasklet+0x1d4/0x1d4 [mt7921e <HASH:d290 7>] [2.702797] mt7921_pci_probe+0x2d6/0x319 [mt7921e <HASH:d290 7>] [2.702799] pci_device_probe+0x9f/0x12a Fixes: 16d98b5 ("mt76: mt7921: rely on mcu_get_nic_capability") Signed-off-by: Sean Wang <[email protected]> Signed-off-by: Felix Fietkau <[email protected]> (cherry picked from commit 12db28c) Signed-off-by: Shreeya Patel <[email protected]>
1 parent baba026 commit 8a89c92

File tree

1 file changed

+0
-20
lines changed
  • drivers/net/wireless/mediatek/mt76/mt7921

1 file changed

+0
-20
lines changed

drivers/net/wireless/mediatek/mt76/mt7921/mcu.c

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,6 @@ static bool mt7921_disable_clc;
1616
module_param_named(disable_clc, mt7921_disable_clc, bool, 0644);
1717
MODULE_PARM_DESC(disable_clc, "disable CLC support");
1818

19-
static int
20-
mt7921_mcu_parse_eeprom(struct mt76_dev *dev, struct sk_buff *skb)
21-
{
22-
struct mt7921_mcu_eeprom_info *res;
23-
u8 *buf;
24-
25-
if (!skb)
26-
return -EINVAL;
27-
28-
skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
29-
30-
res = (struct mt7921_mcu_eeprom_info *)skb->data;
31-
buf = dev->eeprom.data + le32_to_cpu(res->addr);
32-
memcpy(buf, res->data, 16);
33-
34-
return 0;
35-
}
36-
3719
int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,
3820
struct sk_buff *skb, int seq)
3921
{
@@ -60,8 +42,6 @@ int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,
6042
} else if (cmd == MCU_EXT_CMD(THERMAL_CTRL)) {
6143
skb_pull(skb, sizeof(*rxd) + 4);
6244
ret = le32_to_cpu(*(__le32 *)skb->data);
63-
} else if (cmd == MCU_EXT_CMD(EFUSE_ACCESS)) {
64-
ret = mt7921_mcu_parse_eeprom(mdev, skb);
6545
} else if (cmd == MCU_UNI_CMD(DEV_INFO_UPDATE) ||
6646
cmd == MCU_UNI_CMD(BSS_INFO_UPDATE) ||
6747
cmd == MCU_UNI_CMD(STA_REC_UPDATE) ||

0 commit comments

Comments
 (0)