{"id":29077,"date":"2026-09-25T20:31:49","date_gmt":"2026-09-25T12:31:49","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97921"},"modified":"2026-09-25T20:31:49","modified_gmt":"2026-09-25T12:31:49","slug":"cve-2026-97921","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-97921","title":{"rendered":"CVE-2026-97921 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ntracing: Free histogr"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tracing: Free histogram the field rejected for a bad modifier<\/p>\n<p>Writing a hist trigger whose value or variable carries a modifier that is<br \/>\nnot allowed there leaks the fields that were built for it.<\/p>\n<p>__create_val_field() takes the field from parse_expr() and stores it in<br \/>\nhist_data-&gt;fields[] only after the modifier checks have run:<\/p>\n<p>\thist_field = parse_expr(hist_data, file, field_str, flags, var_name,<br \/>\n\t\t\t\t&amp;n_subexprs);<br \/>\n\t&#8230;<br \/>\n\tif (hist_field-&gt;flags &amp; HIST_FIELD_FL_VAR) {<br \/>\n\t\tif (hist_field-&gt;flags &amp; (&#8230;))<br \/>\n\t\t\tgoto err;<br \/>\n\t} else {<br \/>\n\t\tif (hist_field-&gt;flags &amp; (&#8230;))<br \/>\n\t\t\tgoto err;<br \/>\n\t}<\/p>\n<p>\thist_data-&gt;fields[val_idx] = hist_field;<\/p>\n<p>Both checks jump past that store, and the err label returns without<br \/>\nfreeing anything. The error unwinds to create_hist_data(), which calls<br \/>\ndestroy_hist_data() -&gt; destroy_hist_fields(), and that reaches a field<br \/>\nonly by walking fields[]. A field that never got there is unreachable.<\/p>\n<p>commit e0213434fe3e (&#8220;tracing: Do not let histogram values have some<br \/>\nmodifiers&#8221;) set ret to -EINVAL and fell through to the store, which left<br \/>\nthe field owned by fields[] and freed along with the rest of hist_data.<br \/>\nSplitting the check into a value case and a variable case replaced that<br \/>\nfall-through with a goto that skips it.<\/p>\n<p>With CONFIG_DEBUG_KMEMLEAK, 200 writes of<\/p>\n<p>  # echo &#8216;hist:keys=prev_pid:vals=next_pid.log2&#8217; &gt;<br \/>\n\t events\/sched\/sched_switch\/trigger<\/p>\n<p>each correctly rejected with -EINVAL, leave 332 unreferenced objects<br \/>\n(63744 bytes) reported at create_hist_field(); 200 install and remove<br \/>\ncycles of a valid trigger leave none. A &#8216;.log2&#8217; field is two<br \/>\nallocations, since create_hist_field() puts the plain field in<br \/>\noperands[0] of the log2 field, and both are reported.<\/p>\n<p>Use destroy_hist_field() rather than __destroy_hist_field() so that<br \/>\noperands[0] is freed as well. It returns early for HIST_FIELD_FL_VAR_REF,<br \/>\nwhich is what an operand owned by hist_data-&gt;var_refs[] needs; the<br \/>\nrejected field itself is never a var ref, because a var ref never carries<br \/>\na modifier flag.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tracing: Free histogram the field rejected for a bad modifier<\/p>\n<p>Writing a hist trigger whose value or variable carries a modifier th<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29077","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29077","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=29077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}