CVE-2022-49900 in LinuxИнформация

Сводка

по VulDB • 14.06.2026

В ядре Linux устранена следующая уязвимость:

i2c: piix4: Исправлено отсутствие удаления адаптера в функции piix4_remove()

При выполнении инициализации через функцию piix4_probe(), адаптер piix4 регистрируется следующим образом:

piix4_probe() piix4_add_adapters_sb800() / piix4_add_adapter() i2c_add_adapter()

В зависимости от типа обнаруженного устройства вызывается либо функция piix4_add_adapters_sb800(), либо одиночная функция piix4_add_adapter(). Для первого случая переменная piix4_adapter_count устанавливается равной количеству адаптеров, тогда как для второго она не устанавливается и остается по умолчанию *нулевой*.

При удалении модуля piix4 функция piix4_remove() удаляет адаптеры, добавленные в функции piix4_probe(), опираясь на значение переменной piix4_adapter_count. Поскольку при наличии одиночного адаптера счетчик равен нулю, сам адаптер не удаляется, что приводит к утечке ресурсов, выделенных для этого адаптера, таких как клиент i2c и устройство.

Эти ресурсы могут по-прежнему использоваться подсистемой i2c или шиной, вызывая проблемы. Легко воспроизводимый сценарий заключается в том, что если регистрируется новый адаптер, подсистема i2c получает доступ к утеченному адаптеру и пытается вызвать функцию smbus_algorithm, которая уже была освобождена:

Вызывается командой: rmmod i2c_piix4 && modprobe max31730

BUG: unable to handle page fault for address: ffffffffc053d860 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page Oops: 0000 [#1] PREEMPT SMP KASAN
CPU: 0 PID: 3752 Comm: modprobe Tainted: G Hardware name: QEMU Standard PC (i440FX + PIIX, 1996) RIP: 0010:i2c_default_probe (drivers/i2c/i2c-core-base.c:2259) i2c_core RSP: 0018:ffff888107477710 EFLAGS: 00000246 ... <TASK> i2c_detect (drivers/i2c/i2c-core-base.c:2302) i2c_core __process_new_driver (drivers/i2c/i2c-core-base.c:1336) i2c_core bus_for_each_dev (drivers/base/bus.c:301) i2c_for_each_dev (drivers/i2c/i2c-core-base.c:1823) i2c_core i2c_register_driver (drivers/i2c/i2c-core-base.c:1861) i2c_core do_one_initcall (init/main.c:1296) do_init_module (kernel/module/main.c:2455) ... </TASK> ---[ end trace 0000000000000000 ]---

Для устранения этой проблемы корректно устанавливается значение piix4_adapter_count равным 1 для случая одиночного адаптера, чтобы его можно было нормально удалить.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Ответственный

Linux

Резервировать

01.05.2025

Раскрытие

01.05.2025

Модерация

принято

Вход

VDB-307039

EPSS

0.00174

KEV

Нет

Деятельности

Очень низкий

Сектор

Pharma, Energy, ...

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!