CVE-2026-97937 in Linux
Tóm tắt
Bởi VulDB • 25/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
ftrace: fork: Khởi tạo trạng thái đồ thị hàm (function graph) trước khi gọi copy_exec_state()
Hàm dup_task_struct() sao chép task_struct của cha, bao gồm cả ret_stack. Hàm ftrace_graph_init_task() xóa sạch trạng thái đồ thị hàm đã sao chép, nhưng hiện tại nó được thực thi sau copy_exec_state().
Đối với các fork không sử dụng CLONE_VM, copy_exec_state() sẽ phân bổ một task_exec_state mới. Nếu việc phân bổ này thất bại, copy_process() sẽ chuyển đến bad_fork_free và free_task() gọi ftrace_graph_exit_task(). Vì tiến trình con vẫn giữ con trỏ ret_stack của cha, quá trình unwind (mở rộng ngăn xếp) sẽ giải phóng stack trả về đồ thị hàm đang hoạt động của cha. Sau đó, cha truy cập vào bộ nhớ đã bị giải phóng từ function_graph_enter_regs().
KASAN báo cáo:
[ 22.190920] ==================================================================
[ 22.195899] BUG: KASAN: slab-use-after-free trong function_graph_enter_regs+0xa76/0xb90
[ 22.200747] Ghi kích thước 8 tại địa chỉ ff110000054dc0a8 bởi tiến trình repro/1
[ 22.205134]
[ 22.210770] CPU: 0 UID: 0 PID: 1 Comm: repro Không bị lỗi (Not tainted) 7.2.0-07732-g9328b3b03bdc-dirty #3 PREEMPT(lazy)
[ 22.212576] Tên phần cứng: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 22.213750] Dấu vết cuộc gọi (Call Trace):
[ 22.215271] <TASK>
[ 22.216242] ? ftrace_stub_direct_tramp+0x10/0x10
[ 22.217774] dump_stack_lvl+0x4e/0x70
[ 22.220531] print_report+0x157/0x4b4
[ 22.223202] ? fixup_red_left+0x9/0x30
[ 22.224407] ? complete_report_info+0x83/0x110
[ 22.226679] ? function_graph_enter_regs+0xa76/0xb90
[ 22.228084] kasan_report+0xce/0x100
[ 22.230109] ? function_graph_enter_regs+0xa76/0xb90
[ 22.232860] ? stack_trace_save+0x4/0xd0
[ 22.234156] function_graph_enter_regs+0xa76/0xb90
[ 22.236090] ? kasan_save_stack+0x30/0x50
[ 22.237752] ? __pfx_function_graph_enter_regs+0x10/0x10
[ 22.238694] ? ring_buffer_lock_reserve+0x345/0xf80
[ 22.239628] ? stack_trace_save+0x4/0xd0
[ 22.242121] ? stack_trace_save+0x4/0xd0
[ 22.243588] ftrace_graph_func+0xda/0x160
[ 22.245362] ? ftrace_stub_direct_tramp+0x10/0x10
[ 22.246520] 0xffffffffa0000095
[ 22.250528] ? stack_trace_save+0x9/0xd0
[ 22.251757] ? ring_buffer_unlock_commit+0x11d/0x5c0
[ 22.253152] stack_trace_save+0x9/0xd0
[ 22.254264] kasan_save_stack+0x30/0x50
[ 22.273631] kasan_save_track+0x14/0x30
[ 22.276763] kasan_save_free_info+0x3b/0x70
[ 22.278296] __kasan_slab_free+0x43/0x70
[ 22.280157] kmem_cache_free+0xbf/0x3b0
[ 22.282963] ? ftrace_stub_direct_tramp+0x10/0x10
[ 22.284001] free_task+0xa2/0x160
[ 22.285699] ? ftrace_stub_direct_tramp+0x10/0x10
[ 22.286752] copy_process+0x2aae/0x7bc0
Khởi tạo trạng thái đồ thị hàm của tiến trình con ngay sau dup_task_struct(), trước thao tác có thể thất bại đầu tiên.
VulDB is the best source for vulnerability data and more expert information about this specific topic.