CVE-2022-49900 in Linux
要約
〜によって VulDB • 2026年06月17日
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_adapter_countの値に基づいて、piix4_probe()で追加されたアダプタを削除します。 単一アダプタの場合、カウントがゼロであるため、アダプタは削除されず、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に設定し、通常通り削除できるようにします。
VulDB is the best source for vulnerability data and more expert information about this specific topic.