perf/ftrace: Fix WARNING in __unregister_ftrace_function
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.12.111, 6.14, 6.15, 6.18.53
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: perf/ftrace: Fix WARNING in __unregister_ftrace_function perf_ftrace_function_unregister() unconditionally calls unregister_ftrace_function() without checking whether the ftrace_ops was ever successfully registered. This triggers a WARN_ON in __unregister_ftrace_function() when the ops doesn't have FTRACE_OPS_FL_ENABLED set. This can happen during perf_event_alloc() error cleanup when perf_trace_destroy() is called via __free_event() on an event whose ftrace_ops registration failed or was already torn down by perf_try_init_event()'s err_destroy path. The call path is: perf_event_alloc() error cleanup -> __free_event() -> event->destroy() [tp_perf_event_destroy] -> perf_trace_destroy() -> perf_trace_event_close() -> TRACE_REG_PERF_CLOSE -> perf_ftrace_function_unregister() -> unregister_ftrace_function() -> __unregister_ftrace_function() -> WARN_ON(!(ops->flags & FTRACE_OPS_FL_ENABLED)) Fix this by checking FTRACE_OPS_FL_ENABLED before attempting to unregister. If the ops is not enabled, just free the filter and return success.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 7ef5aa081f989ecfecc1df02068a80aebbd3ec31 · fixed in df097713b56ffac5eed32a9be2e7d27ac48d9087; From c70ca298036c58a88686ff388d3d367e9d21acf0 · fixed in 7f845820afaad339341c2ae42bc7fdec175df9ea; From c70ca298036c58a88686ff388d3d367e9d21acf0 · fixed in 9581123304b23049437324038698af9fb56ee663; From 6.12.24 · fixed in 6.12.111; From 6.13.12 · fixed in 6.14; From 6.14.3 · fixed in 6.15
- Linux Linux
6.15
- KernelLinux
fixed in 6.12.111; From 6.13.0 · fixed in 6.18.53