<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 29 Sep 2026 06:22:11 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-97921 — tracing: Free histogram the field rejected for a bad modifier</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-97921</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;tracing: Free histogram the field rejected for a bad modifier&lt;/p&gt;
&lt;p&gt;Writing a hist trigger whose value or variable carries a modifier that is
not allowed there leaks the fields that were built for it.&lt;/p&gt;
&lt;p&gt;__create_val_field() takes the field from parse_expr() and stores it in
hist_data-&amp;gt;fields[] only after the modifier checks have run:&lt;/p&gt;
&lt;p&gt;hist_field = parse_expr(hist_data, file, field_str, flags, var_name,
				&amp;amp;n_subexprs);
	...
	if (hist_field-&amp;gt;flags &amp;amp; HIST_FIELD_FL_VAR) {
		if (hist_field-&amp;gt;flags &amp;amp; (...))
			goto err;
	} else {
		if (hist_field-&amp;gt;flags &amp;amp; (...))
			goto err;
	}&lt;/p&gt;
&lt;p&gt;hist_data-&amp;gt;fields[val_idx] = hist_field;&lt;/p&gt;
&lt;p&gt;Both checks jump past that store, and the err label returns without
freeing anything. The error unwinds to create_hist_data(), which calls
destroy_hist_data() -&amp;gt; destroy_hist_fields(), and that reaches a field
only by walking fields[]. A field that never got there is unreachable.&lt;/p&gt;
&lt;p&gt;commit e0213434fe3e (&amp;#34;tracing: Do not let histogram values have some
modifiers&amp;#34;) set ret to -EINVAL and fell through to the store, which left
the field owned by fields[] and freed along with the rest of hist_data.
Splitting the check into a value case and a variable case replaced that
fall-through with a goto that skips it.&lt;/p&gt;
&lt;p&gt;With CONFIG_DEBUG_KMEMLEAK, 200 writes of&lt;/p&gt;
&lt;p&gt;# echo &amp;#39;hist:keys=prev_pid:vals=next_pid.log2&amp;#39; &amp;gt; \
	 events/sched/sched_switch/trigger&lt;/p&gt;
&lt;p&gt;each correctly rejected with -EINVAL, leave 332 unreferenced objects…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;tracing: Free histogram the field rejected for a bad modifier&lt;/p&gt;
&lt;p&gt;Writing a hist trigger whose value or variable carries a modifier that is
not allowed there leaks the fields that were built for it.&lt;/p&gt;
&lt;p&gt;__create_val_field() takes the field from parse_expr() and stores it in
hist_data-&amp;gt;fields[] only after the modifier checks have run:&lt;/p&gt;
&lt;p&gt;hist_field = parse_expr(hist_data, file, field_str, flags, var_name,
				&amp;amp;n_subexprs);
	...
	if (hist_field-&amp;gt;flags &amp;amp; HIST_FIELD_FL_VAR) {
		if (hist_field-&amp;gt;flags &amp;amp; (...))
			goto err;
	} else {
		if (hist_field-&amp;gt;flags &amp;amp; (...))
			goto err;
	}&lt;/p&gt;
&lt;p&gt;hist_data-&amp;gt;fields[val_idx] = hist_field;&lt;/p&gt;
&lt;p&gt;Both checks jump past that store, and the err label returns without
freeing anything. The error unwinds to create_hist_data(), which calls
destroy_hist_data() -&amp;gt; destroy_hist_fields(), and that reaches a field
only by walking fields[]. A field that never got there is unreachable.&lt;/p&gt;
&lt;p&gt;commit e0213434fe3e (&amp;#34;tracing: Do not let histogram values have some
modifiers&amp;#34;) set ret to -EINVAL and fell through to the store, which left
the field owned by fields[] and freed along with the rest of hist_data.
Splitting the check into a value case and a variable case replaced that
fall-through with a goto that skips it.&lt;/p&gt;
&lt;p&gt;With CONFIG_DEBUG_KMEMLEAK, 200 writes of&lt;/p&gt;
&lt;p&gt;# echo &amp;#39;hist:keys=prev_pid:vals=next_pid.log2&amp;#39; &amp;gt; \
	 events/sched/sched_switch/trigger&lt;/p&gt;
&lt;p&gt;each correctly rejected with -EINVAL, leave 332 unreferenced objects…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-97921</guid>
    </item>
  </channel>
</rss>
