<?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://db.gcve.eu</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>Mon, 26 Oct 2026 13:15:11 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-98869 — bpf: Infer zext_dst based on static register liveness analysis</title>
      <link>https://db.gcve.eu/vuln/cve-2026-98869</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;bpf: Infer zext_dst based on static register liveness analysis&lt;/p&gt;
&lt;p&gt;As reported in the thread [1], the verifier&amp;#39;s 32-bit operations zero
extension logic is broken. This logic is responsible for correct
semantics of 32-bit operations on s390 architecture.&lt;/p&gt;
&lt;p&gt;According to BPF semantics, operation `w1 += 1` is supposed to zero
extend the upper half of the register `r1`. On s390 the JIT relies on
the verifier emitting explicit zero extension before such operations.&lt;/p&gt;
&lt;p&gt;The verifier attempts to minimize the amount of zero extensions
inserted by tracking whether upper halves of the 64-bit registers are
ever used. Previously such tracking worked as follows:&lt;/p&gt;
&lt;p&gt;- bpf_reg_state-&amp;gt;subreg_def field was set by do_check_insn()
  for each operation defining lower but not the upper halves
  of the register.
- Whenever an operation reading the whole register was verified,
  the verifier checked register&amp;#39;s subreg_def and set
  bpf_insn_aux_data-&amp;gt;zext_dst flag as true via a call to
  mark_insn_zext() function.
- After the verification was complete, a special pass
  bpf_opt_subreg_zext_lo32_rnd_hi32() extended 32-bit operations
  with bpf_insn_aux_data-&amp;gt;zext_dst set as true by adding
  explicit zero extension.&lt;/p&gt;
&lt;p&gt;Note that the logic above relies on bpf_reg_state-&amp;gt;subreg_def,
which is a property of a current verifier state.
Before the commit [2] two additional steps happened:&lt;/p&gt;
&lt;p&gt;- The verifier tracked upper and lower register halves&amp;#39; liveness…&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;bpf: Infer zext_dst based on static register liveness analysis&lt;/p&gt;
&lt;p&gt;As reported in the thread [1], the verifier&amp;#39;s 32-bit operations zero
extension logic is broken. This logic is responsible for correct
semantics of 32-bit operations on s390 architecture.&lt;/p&gt;
&lt;p&gt;According to BPF semantics, operation `w1 += 1` is supposed to zero
extend the upper half of the register `r1`. On s390 the JIT relies on
the verifier emitting explicit zero extension before such operations.&lt;/p&gt;
&lt;p&gt;The verifier attempts to minimize the amount of zero extensions
inserted by tracking whether upper halves of the 64-bit registers are
ever used. Previously such tracking worked as follows:&lt;/p&gt;
&lt;p&gt;- bpf_reg_state-&amp;gt;subreg_def field was set by do_check_insn()
  for each operation defining lower but not the upper halves
  of the register.
- Whenever an operation reading the whole register was verified,
  the verifier checked register&amp;#39;s subreg_def and set
  bpf_insn_aux_data-&amp;gt;zext_dst flag as true via a call to
  mark_insn_zext() function.
- After the verification was complete, a special pass
  bpf_opt_subreg_zext_lo32_rnd_hi32() extended 32-bit operations
  with bpf_insn_aux_data-&amp;gt;zext_dst set as true by adding
  explicit zero extension.&lt;/p&gt;
&lt;p&gt;Note that the logic above relies on bpf_reg_state-&amp;gt;subreg_def,
which is a property of a current verifier state.
Before the commit [2] two additional steps happened:&lt;/p&gt;
&lt;p&gt;- The verifier tracked upper and lower register halves&amp;#39; liveness…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-98869</guid>
    </item>
  </channel>
</rss>
