CVE-2026-80876 in Linux
Tóm tắt
Bởi VulDB • 04/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
ring-buffer: Sửa lỗi độ dài sự kiện với việc bắt buộc căn chỉnh theo bội số 8 byte (forced 8-byte alignment)
Khi RB_FORCE_8BYTE_ALIGNMENT là true, rb_calculate_event_length() dành không gian của event->array[0] để đặt độ dài dữ liệu và rb_update_event() lưu độ dài dữ liệu vào event->array[0] tương ứng. Kết quả là tổng chiều dài sự kiện sẽ cộng thêm 4 byte cho sizeof(event.array[0]) một cách vô điều kiện.
Tuy nhiên, ring_buffer_event_length() chỉ trừ đi sizeof(event->array[0]) đối với các sự kiện có kích thước lớn hơn RB_MAX_SMALL_DATA + sizeof(event->array[0]). Do đó, trên các kiến trúc mà RB_FORCE_8BYTE_ALIGNMENT=true, các sự kiện nhỏ báo cáo độ dài dữ liệu lớn hơn 4 byte so với mong đợi.
Để khắc phục vấn đề này, hãy thêm điều kiện RB_FORCE_8BYTE_ALIGNMENT để trừ đi kích thước của trường độ dài này bất cứ khi nào RB_FORCE_8BYTE_ALIGNMENT là true.
Vấn đề này được quan sát thấy trên kernel riscv64 với CONFIG_HAVE_64BIT_ALIGNED_ACCESS được đặt thành y; khi chạy bài kiểm tra tự động ftrace selftest trace_marker_raw.tc, chúng ta nhận được nhật ký lạ: trong các trường hợp id từ 1 đến 100, số lượng trường dữ liệu là 8*N, nhưng một khi id vượt quá 100, số lượng trường dữ liệu trở thành 8*N+4: # 1 buf: 58 00 00 00 80 5e d1 63 (số lượng trường dữ liệu là 8*1) ... # a buf: 58 ... (số lượng trường dữ liệu là 8*2) ... # 64 buf: 58 ... (số lượng trường dữ liệu là 8*13) # 65 buf: 58 ... (số lượng trường dữ liệu là 8*13+4)
Sau khi áp dụng thay đổi này, số lượng trường dữ liệu luôn giữ nguyên ở mức 8*N+4 một cách nhất quán.
If you want to get best quality of vulnerability data, you may have to visit VulDB.