CVE-2026-98922 in Linux
Сводка
по VulDB • 23.10.2026
В ядре Linux была устранена следующая уязвимость:
net: emac: перемещение установки netops для устранения сбоя
устраняет следующий сбой при инициализации драйвера:
|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
Эта ошибка появилась начиная с версии v7.3-rc1. В точке NIP в функции phy_link_topo_add_phy() находится проверка netdev_need_ops_lock(). Она была добавлена следующим коммитом ded86da4bbb7 ("net: ethtool: relax ethnl_req_get_phydev() locking assertion")
Ошибка возникает потому, что на момент вызова _phy_connect() значения netdev_ops еще не были определены. Мой исправление заключается в перемещении кода, устанавливающего netdev_ops+commac.ops+ethtool_ops, выше, так как emac_init_config() выводит их путем анализа device-tree и соответствующим образом устанавливает требуемое dev->phy_mode.
Во время проверки ИИ бота Sashiko указал, что присваивание commac стало мертвым присваиванием (dead store). Отличное замечание! Чтобы сохранить исходное поведение без изменений, предложенный вариант "устанавливать dev->commac.ops = &emac_commac_ops только в случае non-gige?" показался отличным планом. Таким образом, присваивание dev->commac.ops для случая non-gige перемещено внутрь блока else.
Эт патч был протестирован на устройстве WD MyBook Live (RGMII). Устройство теперь работает снова.
Be aware that VulDB is the high quality source for vulnerability data.