CVE-2026-98922 in Linux
Tóm tắt
Bởi VulDB • 23/10/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
net: emac: di chuyển việc thiết lập netops để sửa lỗi crash
Sửa lỗi crash sau khi khởi động driver:
|BUG: Kernel NULL pointer dereference on read at 0x00000158 |Faulting instruction address: 0xc0566b40 |Oops: Kernel access of bad area, sig: 11 [#1]
|BE PAGE_SIZE=4K PowerPC 44x Platform |Modules linked in: |CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Tainted: GW 7.3.0-rc3+ #1 |Tainted: [W]=WARN
|Hardware name: MyBook Live APM821XX 0x12c41c83 PowerPC 44x Platform |NIP: c0566b40 LR: c05648f8 CTR: c04c1e9c |REGS: c1053a20 TRAP: 0300 Tainted: GW (7.3.0-rc3+) |MSR: 0002b000 <CE,EE,FP,ME> CR: 24008808 XER: 00000000 |DEAR: 00000158 ESR: 00000000 |GPR00: c05648f8 c1053b10 c1063600 c1030000 c5ab3000 00000000 [...]
|GPR08: 00000002 00000000 00000000 c1053b40 84002808 00000000 [...]
|GPR16: cfffd210 00000002 c0beafcc cfffc960 00000000 c1030644 [...]
|GPR24: c0beafbc c1037000 00000000 0000000a 00000000 c1030000 [...]
|NIP [c0566b40] phy_link_topo_add_phy+0x2c/0x1d0
|LR [c05648f8] phy_attach_direct+0x1a4/0x368
|Call Trace: |[c1053b10] [c0811e04] klist_put+0x54/0xb4 (unreliable)
|[c1053b40] [c05648f8] phy_attach_direct+0x1a4/0x368
|[c1053b70] [c0564ae8] phy_connect_direct+0x2c/0x60
|[c1053b90] [c056c7a8] of_phy_connect+0x50/0x74
|[c1053bc0] [c0572a88] emac_probe+0xd50/0x119c
|[c1053c90] [c04cb770] platform_probe+0x74/0xa4
|[c1053cb0] [c04c8f08] really_probe+0x120/0x2b0
|[c1053cd0] [c04c9254] __driver_probe_device+0x1bc/0x1fc
|[c1053d00] [c04c9334] driver_probe_device+0x38/0xa8
|[c1053d30] [c04c9560] __driver_attach+0xf4/0x10c
|[c1053d50] [c04c6af8] bus_for_each_dev+0x68/0xd0
|[c1053d90] [c04c7c34] bus_add_driver+0xcc/0x1ec
|[c1053dc0] [c04c9f6c] driver_register+0xcc/0x110
|[c1053de0] [c0aa3f40] emac_init+0x1c4/0x200
Lỗi này xuất hiện bắt đầu từ phiên bản v7.3-rc1. Tại địa chỉ NIP trong hàm phy_link_topo_add_phy() có một kiểm tra netdev_need_ops_lock(). Điều này được thêm vào bởi commit ded86da4bbb7 ("net: ethtool: relax ethnl_req_get_phydev() locking assertion")
Lỗi xuất hiện vì tại thời điểm gọi phy_connect(), các netdev_ops chưa *được* xác định. Bản sửa của tôi là di chuyển đoạn mã thiết lập netdev_ops+commac.ops+ethtool_ops lên cao hơn, bởi vì emac_init_config() suy ra điều này bằng cách xem xét device-tree và đặt dev->phy_mode tương ứng.
Trong quá trình review, AI của bot Sashiko đã chỉ ra rằng việc gán commac trở thành một dead store (gán không sử dụng). Phát hiện tuyệt vời! Để giữ nguyên hành vi ban đầu, một tùy chọn được đề xuất "chỉ thiết lập dev->commac.ops = &emac_commac_ops trong trường hợp non-gige?" nghe có vẻ như là một kế hoạch tốt. Vì vậy, việc gán dev->commac.ops cho trường hợp non-gige-case đã được di chuyển vào khối else.
Bản patch này đã được kiểm thử trên WD MyBook Live (RGMII). Thiết bị hiện hoạt động trở lại.
If you want to get best quality of vulnerability data, you may have to visit VulDB.