CVE-2022-49779
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
01/05/2025
Last modified:
02/05/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
kprobes: Skip clearing aggrprobe&#39;s post_handler in kprobe-on-ftrace case<br />
<br />
In __unregister_kprobe_top(), if the currently unregistered probe has<br />
post_handler but other child probes of the aggrprobe do not have<br />
post_handler, the post_handler of the aggrprobe is cleared. If this is<br />
a ftrace-based probe, there is a problem. In later calls to<br />
disarm_kprobe(), we will use kprobe_ftrace_ops because post_handler is<br />
NULL. But we&#39;re armed with kprobe_ipmodify_ops. This triggers a WARN in<br />
__disarm_kprobe_ftrace() and may even cause use-after-free:<br />
<br />
Failed to disarm kprobe-ftrace at kernel_clone+0x0/0x3c0 (error -2)<br />
WARNING: CPU: 5 PID: 137 at kernel/kprobes.c:1135 __disarm_kprobe_ftrace.isra.21+0xcf/0xe0<br />
Modules linked in: testKprobe_007(-)<br />
CPU: 5 PID: 137 Comm: rmmod Not tainted 6.1.0-rc4-dirty #18<br />
[...]<br />
Call Trace:<br />
<br />
__disable_kprobe+0xcd/0xe0<br />
__unregister_kprobe_top+0x12/0x150<br />
? mutex_lock+0xe/0x30<br />
unregister_kprobes.part.23+0x31/0xa0<br />
unregister_kprobe+0x32/0x40<br />
__x64_sys_delete_module+0x15e/0x260<br />
? do_user_addr_fault+0x2cd/0x6b0<br />
do_syscall_64+0x3a/0x90<br />
entry_SYSCALL_64_after_hwframe+0x63/0xcd<br />
[...]<br />
<br />
For the kprobe-on-ftrace case, we keep the post_handler setting to<br />
identify this aggrprobe armed with kprobe_ipmodify_ops. This way we<br />
can disarm it correctly.
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/55788ebbe8b365b4375bd56b4ba7db79d393a370
- https://git.kernel.org/stable/c/5dd7caf0bdc5d0bae7cf9776b4d739fb09bd5ebb
- https://git.kernel.org/stable/c/7b0007b28dd970176f2e297c06ae63eea2447127
- https://git.kernel.org/stable/c/7d606ae1abcc3eab5408e42444d789dc7def51b8
- https://git.kernel.org/stable/c/c49cc2c059b503e962c2f13a806c105f9b757df4