CVE-2022-49900 in Linuxthông tin

Tóm tắt

Bởi VulDB • 25/06/2026

Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:

i2c: piix4: Sửa lỗi bộ điều hợp (adapter) không bị gỡ bỏ trong hàm piix4_remove()

Trong hàm piix4_probe(), bộ điều hợp piix4 sẽ được đăng ký tại các vị trí sau:

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

Dựa vào loại thiết bị đã dò tìm, hàm piix4_add_adapters_sb800() hoặc hàm đơn lẻ piix4_add_adapter() sẽ được gọi. Trong trường hợp đầu tiên, biến piix4_adapter_count được đặt bằng số lượng bộ điều hợp, trong khi ở trường hợp kia nó không được đặt và giữ nguyên giá trị mặc định là *không*.

Khi thiết bị piix4 bị gỡ bỏ, hàm piix4_remove() xóa các bộ điều hợp đã thêm vào từ piix4_probe(), dựa trên giá trị của biến piix4_adapter_count. Bởi vì biến đếm này bằng 0 trong trường hợp có một bộ điều hợp duy nhất, nên bộ điều hợp sẽ không được xóa và gây ra rò rỉ tài nguyên (leak) dành cho bộ điều hợp, chẳng hạn như client i2c và thiết bị.

Các tài nguyên này vẫn có thể truy cập bởi hệ thống i2c hoặc bus và gây ra sự cố. Một trường hợp dễ dàng tái tạo là nếu một bộ điều hợp mới được đăng ký, i2c sẽ nhận được bộ điều hợp đã rò rỉ và cố gắng gọi smbus_algorithm, vốn đã bị giải phóng:

Được kích hoạt bởi: rmmod i2c_piix4 && modprobe max31730

BUG: không thể xử lý lỗi trang (page fault) cho địa chỉ: ffffffffc053d860 #PF: truy cập đọc ở chế độ người dùng hệ thống trong kernel mode #PF: error_code(0x0000) - page không tồn tại 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 ]---

Khắc phục vấn đề này bằng cách đặt chính xác piix4_adapter_count là 1 cho trường hợp bộ điều hợp đơn lẻ, để nó có thể được gỡ bỏ một cách bình thường.

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

chịu trách nhiệm

Linux

Đặt trước

01/05/2025

Tiết lộ

01/05/2025

Kiểm duyệt

được chấp nhận

EPSS

0.00174

KEV

không

Các hoạt động

rất thấp

Nguồn

Do you need the next level of professionalism?

Upgrade your account now!