CVE-2025-71125CVE-2025-71125是Linux内核中tracing子系统的一个中等严重性漏洞。该漏洞存在于synthetic events(合成事件)的perf event注册机制中。由于synthetic events缺少注册perf events的函数实现,当代码尝试注册perf events时,会调用tracepoint注册函数并传入NULL函数指针,导致内核触发警告(WARNING)。具体表现为在tracepoint_add_func函数中检测到无效的函数指针,从而引发内核警告信息。这种情况虽然不会直接导致系统崩溃,但会生成大量警告信息,影响系统日志的可用性,并且在高并发场景下可能对系统性能产生负面影响。攻击者可以通过本地低权限用户触发该漏洞,利用perf_event_open系统调用尝试创建synthetic事件,从而导致内核警告被触发,影响系统的稳定性和可用性。
该漏洞的根本原因在于Linux内核的tracing子系统设计缺陷。在kernel/trace/trace_events_synth.c中,synthetic events模块没有实现perf event注册的回调函数。当用户空间程序(如perf工具)尝试通过perf_event_open系统调用创建synthetic类型的事件时,会调用perf_trace_init -> perf_trace_event_init -> synth_event_reg函数链。然而,synth_event_reg函数直接调用tracepoint_probe_register而没有先检查是否支持perf events注册,导致传递NULL函数指针给tracepoint_add_func。
在tracepoint_add_func函数(kernel/tracepoint.c:175)中,代码检测到func参数为NULL,触发WARNING并输出详细的堆栈跟踪信息。堆栈显示调用路径为:perf_event_open -> __se_sys_perf_event_open -> perf_event_alloc -> perf_try_init_event -> perf_tp_event_init -> perf_trace_init -> perf_trace_event_init -> synth_event_reg -> tracepoint_probe_register -> tracepoint_add_func。
修复方案是让synth_event_reg函数在不支持的情况下返回-ENODEV错误码,而不是尝试注册NULL函数指针。这样可以让用户空间工具(如perf)优雅地处理错误,而不是产生内核警告。理想情况下,未来版本应该完整实现synthetic events的perf event支持。