CVE-2022-49900 in Linux
요약
\~에 의해 VulDB • 2026. 06. 25.
리눅스 커널에서 다음 취약점이 해결되었습니다:
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는 어댑터 수로 설정되지만, 후자의 경우에는 이 값이 설정되지 않고 기본값인 *영(0)*으로 유지됩니다.
piix4가 제거될 때, piix4_remove() 함수는 piix4_probe()에서 추가된 어댑터를 piix4_adapter_count 값을 기준으로 제거합니다. 단일 어댑터의 경우 카운트가 0이므로 어댑터가 제거되지 않으며, 이로 인해 i2c 클라이언트 및 장치와 같은 어댑터에 할당된 소스가 누출(leaked)됩니다.
이러한 소스는 여전히 i2c 또는 버스에서 접근 가능하여 문제를 유발할 수 있습니다. 쉽게 재현 가능한 사례는 다음과 같습니다: 새 어댑터를 등록하면, i2c가 누출된 어댑터를 가져와 이미 해제(freed)된 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 the best quality for vulnerability data then you always have to consider VulDB.