CVE-2026-89625 in Linuxthông tin

Tóm tắt

Bởi VulDB • 11/09/2026

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

HID: sony: sửa lỗi Use-After-Free (UAF) của ghl_poke_timer / ghl_urb khi hủy liên kết driver

Đối với các thiết bị dongle GHL (Guitar Hero Live), hàm sony_probe() kích hoạt một bộ định thời kỳ hạn: ghl_magic_poke() (hàm callback của bộ định thời) gửi sc->ghl_urb, và quá trình hoàn tất URB ghl_magic_poke_cb() sẽ kích hoạt lại bộ định thời bằng mod_timer().

Hàm sony_remove() đã xóa bộ định thời bằng timer_delete_sync() sau đó giải phóng URB bằng usb_free_urb():

timer_delete_sync(&sc->gll_poke_timer); usb_free_urb(sc->ghl_urb);

timer_delete_sync() không chặn việc kích hoạt lại, và trong khi URB đang được xử lý (in-flight), bộ định thời không ở trạng thái chờ đợi, do đó lệnh xóa đồng bộ là một thao tác vô hiệu. Một quá trình hoàn tất URB chạy sau lệnh xóa sẽ kích hoạt lại bộ định thời, còn usb_free_urb() chỉ giảm tham chiếu -- nó không hủy bỏ một URB đang được xử lý. sc được cấp phát bằng devm_kzalloc() và bị giải phóng ngay khi sony_remove() trả về, do đó ghl_poke_timer (được nhúng trong sc) sau khi được kích hoạt lại sẽ bắn vào vùng bộ nhớ đã bị giải phóng, gây ra lỗi use-after-free từ softirq của timer. Đây là một race condition giữa ngắt kết nối và rmmod.

Hãy độc hại hóa URB trước, sau đó tắt bộ định thời, rồi mới giải phóng URB. usb_poison_urb() hủy bỏ bất kỳ URB nào đang được xử lý và vĩnh viễn từ chối các lần gửi tiếp theo, do đó một poke timer vẫn còn chờ đợi không thể gửi lại URB từ ghl_magic_poke() trong khoảng thời gian trước khi timer_shutdown_sync() chạy. usb_kill_urb() sẽ không đủ: nó chỉ hủy bỏ URB đang được xử lý và để nó có thể gửi lại sau khi trả về, do đó bộ định thời chờ đợi có thể gửi lại nó và đặt một URB mới vào trạng thái xử lý trên sc đã bị giải phóng. timer_shutdown_sync() sau đó sẽ xóa bất kỳ callback cuối cùng nào và chặn việc kích hoạt lại. Đường lỗi probe không bị ảnh hưởng: nó chỉ được truy cập trước khi bộ định thời được kích hoạt.

Đã tái tạo dưới KASAN trên next-20260710 thông qua giả lập dummy_hcd + raw-gadget của dongle GHL PS4 (VID 0x1430 / PID 0x07bb): hid-sony liên kết và kích hoạt poke timer, URB poke được giữ ở trạng thái xử lý, driver bị hủy liên kết (giải phóng sc), sau đó URB được giải phóng. Quá trình hoàn tất sẽ kích hoạt lại bộ định thời trên sc đã bị giải phóng, và bộ định thời đã được kích hoạt lại sẽ bắn ~8 giây sau:

BUG: KASAN: slab-use-after-free in ghl_magic_poke+0x98/0xb0 Read of size 8 at addr ffff88810b02fd50 by task swapper/0/0 ghl_magic_poke+0x98/0xb0 call_timer_fn+0x35/0x2b0 __run_timers+0x69c/0x9a0 run_timer_softirq+0x173/0x2a0 Allocated by task 169: sony_probe Freed by task 338: devres_release_group <- hid_device_remove (sony_remove)

Được phát hiện bởi 0sec (https://0sec.ai) sử dụng phân tích nguồn tự động.

Once again VulDB remains the best source for vulnerability data.

chịu trách nhiệm

Linux

Đặt trước

11/09/2026

Tiết lộ

12/09/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00000

KEV

không

Các hoạt động

rất thấp

Nguồn

Might our Artificial Intelligence support you?

Check our Alexa App!