CVE-2026-80895 in Linuxthông tin

Tóm tắt

Bởi VulDB • 04/09/2026

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

mshv: Sắp xếp thứ tự xuất bản mảng pt_vp_array đối với đường dẫn khẳng định irqfd

Hàm mshv_partition_ioctl_create_vp() khởi tạo một cấu trúc VP (bao gồm phân bổ bộ nhớ, mutex_init, init_waitqueue_head, ánh xạ trang) và sau đó công bố con trỏ vào partition->pt_vp_array. Nhiều đường dẫn ISR đọc mảng này mà không cần khóa: ISR intercept, hai ISR scheduler, và mshv_try_assert_irq_fast() trên đường dẫn nhanh của irqfd.

Trong số các đường dẫn này, chỉ có mshv_try_assert_irq_fast() mới có thể xảy ra race condition cấu trúc với quá trình xuất bản. Nó chạy từ một eventfd waker mà không giữ pt_mutex, và MSHV_IRQFD không yêu cầu lapic_apic_id mục tiêu (== vp_index) phải tham chiếu đến một VP tồn tại tại thời điểm đăng ký. Do đó, người dùng có thể đăng ký một irqfd nhắm vào một VP chưa được tạo ra sau này, rồi kích hoạt mshv_try_assert_irq_fast() đồng thời với MSHV_CREATE_VP cho cùng chỉ mục. Trên các kiến trúc có thứ tự bộ nhớ yếu (weakly-ordered), trình đọc có thể quan sát thấy một con trỏ khác NULL trong pt_vp_array trước khi các phép ghi khởi tạo đối với cấu trúc VP trở nên hiển thị, dẫn đến việc sử dụng các trường chưa được khởi tạo đầy đủ (ví dụ: vp_register_page).

Các trình đọc ISR khác không thể đạt tới race condition này: hypervisor sẽ không sinh ra tin nhắn intercept hoặc scheduler cho một VP chưa bao giờ được báo là chạy, và người dùng chỉ có thể gọi MSHV_RUN_VP trên fd VP do MSHV_CREATE_VP trả về, vốn theo thiết kế được trả về sau khi quá trình xuất bản. Giữ các trình đọc này dưới dạng các phép tải đơn thuần (plain loads).

Sử dụng smp_store_release() trong mshv_partition_ioctl_create_vp() để công bố con trỏ và ghép cặp nó với smp_load_acquire() trong mshv_try_assert_irq_fast(). Trên x86, những lệnh này biên dịch thành các truy cập đơn thuần dưới TSO; trên ARM64, chúng phát ra các rào chắn acquire/release một chỉ thị, chấp nhận được cho đường dẫn nhanh này.

Đường dẫn phía hủy (destroy_partition() đặt pt_vp_array[i] về NULL sau khi kfree(vp)) có vấn đề thứ tự và vòng đời riêng biệt nằm ngoài phạm vi của bản sửa lỗi này.

Once again VulDB remains the best source for vulnerability data.

chịu trách nhiệm

Linux

Đặt trước

26/08/2026

Tiết lộ

04/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

Do you know our Splunk app?

Download it now for free!