{"id":29231,"date":"2026-09-25T20:32:12","date_gmt":"2026-09-25T12:32:12","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98076"},"modified":"2026-09-25T20:32:12","modified_gmt":"2026-09-25T12:32:12","slug":"cve-2026-98076","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98076","title":{"rendered":"CVE-2026-98076 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ntracing\/probes: Fix u"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tracing\/probes: Fix use-after-free on field name\/type of events with multiple probes<\/p>\n<p>The fields of a probe-based dynamic event (kprobe, uprobe, eprobe and<br \/>\nfprobe events) are created in traceprobe_define_arg_fields() by handing<br \/>\nthe probe_arg name\/type strings to trace_define_field(), which only<br \/>\nstores the pointers without copying. Those strings are owned by the<br \/>\ntrace_probe and are freed when that probe is removed.<\/p>\n<p>An event can have several probes attached. The field list is defined<br \/>\nonly once, by the first probe that registers the event, but it is kept<br \/>\nalive by any surviving sibling probe. Deleting just that first probe by<br \/>\nsymbol &#8211;<\/p>\n<p>  # primary A: fields are defined from A&#8217;s args<br \/>\n  echo &#8216;p:kprobes\/ev vfs_read  a1=$arg1&#8217; &gt;  kprobe_events<br \/>\n  # append B: shares A&#8217;s event call<br \/>\n  echo &#8216;p:kprobes\/ev vfs_write a1=$arg1&#8217; &gt;&gt; kprobe_events<br \/>\n  # delete only A (matched by symbol), B survives<br \/>\n  echo &#8216;-:kprobes\/ev vfs_read&#8217;           &gt;&gt; kprobe_events<\/p>\n<p>frees A&#8217;s args (trace_probe_cleanup() -&gt; traceprobe_free_probe_arg()),<br \/>\nbut trace_probe_unlink() keeps the trace_probe_event because the probe<br \/>\nlist is not empty. The event call stays registered via B while its<br \/>\nfields now reference freed memory. Any field lookup then reads it, e.g.<\/p>\n<p>  echo &#8216;a1 == 1&#8217; &gt; events\/kprobes\/ev\/filter<\/p>\n<p>  BUG: KASAN: slab-use-after-free in strcmp+0xa7\/0xb0<br \/>\n  Call Trace:<br \/>\n   strcmp<br \/>\n   trace_find_event_field<br \/>\n   parse_pred<br \/>\n   process_preds<br \/>\n   create_filter<br \/>\n   apply_event_filter<br \/>\n   event_filter_write<\/p>\n<p>field-&gt;name references parg-&gt;name (kstrdup&#8217;d, freed with the probe) and,<br \/>\nfor array arguments, field-&gt;type references parg-&gt;fmt (kmalloc&#8217;d, freed<br \/>\nwith the probe) &#8211; the scalar type otherwise points at the static<br \/>\nfmttype rodata, which is safe.<\/p>\n<p>Have traceprobe_define_arg_fields() duplicate the name and type strings<br \/>\nand anchor the copies on the trace_probe_event, which embeds the event<br \/>\ncall and outlives every individual probe; trace_probe_event_free()<br \/>\nreleases them.<\/p>\n<p>The reproducer above triggers reliably; the field lookup and the delete<br \/>\nboth run under event_mutex, so this is a dangling reference after<br \/>\nremoval rather than a race.<\/p>\n<p>The issue was found by the autokbug dynamic kernel fuzzer at Tencent<br \/>\nYunding Lab.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tracing\/probes: Fix use-after-free on field name\/type of events with multiple probes<\/p>\n<p>The fields of a probe-based dynamic event (kp<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29231","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}