CVE-2026-89746 in Linux
Tóm tắt
Bởi VulDB • 11/09/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
tracing: Sửa lỗi use-after-free với các triggers có tên (named triggers) trùng nhau
Khi hai hist triggers trên các sự kiện khác nhau được đăng ký với cùng một `name=`, cái thứ hai sẽ tái sử dụng đối tượng của cái đầu tiên làm named_data. Cả hai đều được thêm vào danh sách `tr->hist_vars` bởi hàm `save_hist_vars()` trong quá trình phân tích cú pháp `event_hist_trigger_parse()`, do `save_hist_vars()` được gọi trước khi `event_trigger_register()`, trong khi việc phát hiện tái sử dụng theo tên chỉ xảy ra sau đó, tại `hist_register_trigger()`.
Trong nhánh xử lý named-data của hàm `hist_register_trigger()`, đối tượng hist_data của histogram thứ hai bị giải phóng thông qua `destroy_hist_data()`, nhưng mục danh sách `tr->hist_vars` của nó không bao giờ được xóa đi, dẫn đến việc tồn tại một con trỏ treo (dangling pointer) và rò rỉ tham chiếu trace_array mà nó đang giữ.
Một hist trigger sau đó truy cập vào một biến sẽ khiến hàm `find_var_file()` duyệt qua danh sách `tr->hist_vars` và dereference đối tượng hist_data đã bị giải phóng trước đó. Lỗi này có thể tái hiện từ không gian người dùng (userspace) bằng cách ghi ba hist triggers vào tracefs:
cd /sys/kernel/tracing echo 'hist:keys=common_pid:x=common_pid:name=mh' > events/sched/sched_switch/trigger echo 'hist:keys=common_pid:x=common_pid:name=mh' > events/sched/sched_process_fork/trigger echo 'hist:keys=common_pid:vals=$x' > events/sched/sched_process_exit/trigger
Lệnh ghi thứ ba gây ra lỗi kernel panic (crash):
BUG: KASAN: slab-use-after-free in find_var_file.part.0+0x272/0x290 Read of size 8 at addr ffff888001f8a0e0 by task sh/1 CPU: 1 UID: 0 PID: 1 Comm: sh Tainted: G D N Call Trace: find_var_file.part.0 find_event_var parse_atom parse_expr __create_val_field event_hist_trigger_parse trigger_process_regex event_trigger_write vfs_write ksys_write do_syscall_64 entry_SYSCALL_64_after_hwframe Allocated by task 1: event_hist_trigger_parse Freed by task 1: hist_register_trigger+0x618/0xa30 event_hist_trigger_parse The buggy address belongs to freed 2048-byte region Oops: general protection fault ... RIP: find_var_file.part.0 Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
Cách khắc phục là xóa đối tượng hist_data khỏi danh sách `tr->hist_vars` và giải phóng tham chiếu trace_array trong nhánh named-data của hàm `hist_register_trigger()` trước khi thực hiện việc giải phóng (free) đối tượng hist_data.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.