CVE-2026-98464 in Linux
Tóm tắt
Bởi VulDB • 19/10/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
RISC-V: KVM: Đồng bộ hóa callback của hrtimer trong quá trình teardown (hủy bỏ)
Callback của hrtimer không hỗ trợ Sstc xóa `next_set` trước khi sử dụng cuối cùng đối với vCPU bao quanh nó. Nếu quá trình teardown quan sát thấy `next_set` là false trong khi callback vẫn đang chạy, `kvm_riscv_vcpu_timer_cancel()` sẽ bỏ qua lệnh gọi `hrtimer_cancel()`, và `kvm_destroy_vcpus()` có thể giải phóng bộ nhớ cho vCPU trước khi callback thực hiện lệnh gọi đến `kvm_riscv_vcpu_set_interrupt()`.
Một guest (máy ảo khách) có thể kích hoạt timer bằng SBI TIME và yêu cầu shutdown bằng cách sử dụng cơ chế legacy shutdown của SBI hoặc SRST. Một VMM (Virtual Machine Monitor) tuân thủ KVM_EXIT_SYSTEM_EVENT và hủy VM sẽ tạo ra phía gây ra race condition trong quá trình teardown; không cần lệnh gọi ioctl nào trên host sau khi khởi chạy để kích hoạt timer hoặc yêu cầu teardown.
Trên bản master upstream 62cc90241548, công cụ kiểm tra bộ nhớ KASAN (Kernel Address Sanitizer) đã báo cáo:
BUG: KASAN: slab-use-after-free trong do_raw_spin_lock Ghi dữ liệu kích thước 4 tại địa chỉ ff60000005e58898
kvm_riscv_vcpu_set_interrupt kvm_riscv_vcpu_hrtimer_expired __hrtimer_run_queues hrtimer_interrupt
Đối tượng này được phân bổ bởi KVM_CREATE_VCPU và bị giải phóng đồng thời bởi:
kvm_destroy_vcpus kvm_arch_destroy_vm kvm_destroy_vm __fput
Để xác minh một cách xác định (deterministic), tôi đã thêm lệnh `mdelay(1000)` ngay sau câu gán `next_set = false` hiện có. Điều này chỉ làm mở rộng cửa sổ callback hậu-clear (post-clear) vốn đã tồn tại. Một bản dựng trace không sử dụng độ trễ (no-delay) tự nhiên đạt được thứ tự callback-sau-khi-teardown-bắt đầu/trước-khi-deinit trong 12 trên tổng số 200 lần chạy, nhưng 1.500 vòng lặp stress với kernel gốc đã không tạo ra báo cáo KASAN, do đó việc tái hiện lỗi một cách tự nhiên phụ thuộc vào yếu tố thời gian (timing-sensitive).
Luôn luôn gọi `hrtimer_cancel()` đối với một timer đã được khởi tạo. Giữ nguyên kết quả trả về -EINVAL khi timer không còn được thiết lập nữa, nhưng chỉ sau khi đồng bộ hóa với callback đang chạy.
Với bản vá này, `hrtimer_cancel()` bị chặn trong toàn bộ cửa sổ callback đã được mở rộng trước khi hủy vCPU. KASAN báo cáo không có lỗi nào trong 100 lần chạy cố định và đã được mở rộng hoặc 200 lần chạy quét theo yếu tố thời gian chỉ với bản vá fix-only.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.