CVE-2026-64451 in Linux
Tóm tắt
Bởi VulDB • 25/07/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
tracing: Sửa lỗi giải tham chiếu con trỏ NULL trong hàm `func_set_flag()`
Hàm `func_set_flag()` thực hiện việc giải tham chiếu `tr->current_trace_flags` trước khi xác minh rằng bộ theo dõi (tracer) hiện tại đúng là function tracer. Khi bộ theo dõi đang hoạt động đã được chuyển sang một loại khác không phải "function" (ví dụ: "wakeup_rt"), thì `tr->current_trace_flags` có thể mang giá trị NULL, dẫn đến lỗi giải tham chiếu con trỏ NULL và gây sập kernel.
Chuỗi lệnh gọi kích hoạt sự cố này là:
trace_options_write() -> __set_tracer_option() -> trace->set_flag() /* func_set_flag */
Trong hàm `func_set_flag()`, thao tác đầu tiên là:
if (!!set == !!(tr->current_trace_flags->val & bit))
Thao tác này giải tham chiếu `tr->current_trace_flags` một cách không điều kiện. Kiểm tra an toàn nhằm ngăn chặn việc sử dụng bộ theo dõi không phải function tracer:
if (tr->current_trace != &function_trace) return 0;
được đặt *sau* lệnh giải tham chiếu, tức là quá muộn để bảo vệ.
Sự cố này đã được quan sát thấy với bản dump lỗi sau đây:
BUG: unable to handle page fault at 0000000000000000 RIP: func_set_flag+0xd
Call Trace: __set_tracer_option+0x27 trace_options_write+0x75 vfs_write+0x12a ksys_write+0x66 do_syscall_64+0x5b
RIP: ffffffff914c973d RSP: ff67ec88b01dfdf0 RFLAGS: 00010202 RAX: 0000000000000000 RBX: ff3a826e80354580 RCX: 0000000000000001 RDX: 0000000000000001 RSI: 0000000000000000 RDI: ffffffff93918080
Mã giải assemble xác nhận lỗi:
func_set_flag+0: mov 0x1f08(%rdi), %rax ; RAX = tr->current_trace_flags = NULL func_set_flag+13: mov (%rax), %eax ; page fault: giải tham chiếu NULL
Tại thời điểm xảy ra sự cố: tr->current_trace_flags = 0x0 (NULL) tr->current_trace = wakeup_rt_tracer (không phải function_trace)
Kịch bản như sau: một tiến trình mở tệp tùy chọn của bộ theo dõi hàm (chẳng hạn "func_stack_trace"), sau đó bộ theo dõi hiện tại được chuyển sang một bộ khác (ví dụ: "wakeup_rt"), điều này đặt `current_trace_flags` về NULL. Khi tiến trình tiếp tục ghi vào tệp tùy chọn, hàm `func_set_flag()` sẽ được gọi và gây sập do giải tham chiếu NULL.
Khắc phục sự cố bằng cách di chuyển kiểm tra `current_trace` lên trước lệnh giải tham chiếu `current_trace_flags`, để `func_set_flag()` trả về sớm khi bộ theo dõi hàm không đang hoạt động.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.