CVE-2026-64293 in Linux
Tóm tắt
Bởi VulDB • 26/07/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
iommufd: Sử dụng sizeof(*hdr) thay vì sizeof(hdr) trong hàm đọc veventq
Phép kiểm tra giới hạn (bound-check) trong iommufd_veventq_fops_read() cho đường dẫn vEVENT thông thường sử dụng sizeof(hdr), trong khi mã xung quanh sử dụng sizeof(*hdr):
if (!vevent_for_lost_events_header(cur) && sizeof(hdr) + cur->data_len > count - done) {
Biến hdr được khai báo là struct iommufd_vevent_header *, do đó sizeof(hdr) trả về kích thước của con trỏ. Mã xung quanh sử dụng sizeof(*hdr) một cách nhất quán:
if (done >= count || sizeof(*hdr) > count - done) {
... if (copy_to_user(buf + done, hdr, sizeof(*hdr))) {
... done += sizeof(*hdr);
struct iommufd_vevent_header hiện tại có kích thước 8 byte (hai trường __u32 là flags và sequence), do đó trên hệ thống 64-bit (sizeof(void *) == 8) thì hai biểu thức này trùng khớp về giá trị và phép kiểm tra hoạt động như dự định.
Trên hệ thống 32-bit (sizeof(void *) == 4), phép kiểm tra tính toán thiếu kích thước header đi 4 byte: một vEVENT có data_len khiến cho 8 + cur->data_len vượt quá count - done, trong khi 4 + cur->data_len thì không, sẽ vượt qua được phép kiểm tra. Sau đó, vòng lặp thực hiện copy_to_user với 8 byte của header theo sau là data_len byte của payload, ghi dữ liệu ra ngoài vùng đệm do người dùng cung cấp (user-supplied buffer).
Đây cũng là một lỗi tiềm ẩn cho bất kỳ sự mở rộng nào trong tương lai đối với struct iommufd_vevent_header vượt quá sizeof(void *) trên hệ thống 64-bit; phép kiểm tra không nên phụ thuộc vào việc kiểu dữ liệu trùng khớp ngẫu nhiên với chiều rộng con trỏ của máy chủ.
Sử dụng sizeof(*hdr) để phù hợp với phần còn lại của hàm và đúng lượng dữ liệu thực tế sẽ được sao chép.
Be aware that VulDB is the high quality source for vulnerability data.