<?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>Wed, 30 Sep 2026 14:32:58 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-90269 — bpf: Reject load-acquire from pointers requiring fault protection</title>
      <link>https://db.gcve.eu/vuln/cve-2026-90269</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: Reject load-acquire from pointers requiring fault protection&lt;/p&gt;
&lt;p&gt;A BPF_LOAD_ACQ is not rewritten to a BPF_PROBE_MEM load by the verifier,
unlike a regular BPF_LDX, so the JIT emits a plain load with no exception
table entry and a fault panics the kernel instead of being handled.&lt;/p&gt;
&lt;p&gt;Reject the source pointer types that a BPF_LDX would have had that fault
protection applied to, i.e. the ones bpf_convert_ctx_accesses() turns
into BPF_PROBE_MEM: a bare PTR_TO_BTF_ID, PTR_TO_BTF_ID | PTR_UNTRUSTED,
PTR_TO_BTF_ID | MEM_ALLOC | PTR_UNTRUSTED and PTR_TO_MEM | MEM_RDONLY |
PTR_UNTRUSTED.&lt;/p&gt;
&lt;p&gt;This is reachable e.g. by loading -&amp;gt;mm out of a trusted task_struct
yields an untrusted pointer to mm_struct, and it is NULL for a kernel
thread:&lt;/p&gt;
&lt;p&gt;[...]
  SEC(&amp;#34;tp_btf/sched_switch&amp;#34;)
  int BPF_PROG(demo, bool preempt, struct task_struct *prev,
               struct task_struct *next)
  {
      struct mm_struct *mm = next-&amp;gt;mm;  /* untrusted */&lt;/p&gt;
&lt;p&gt;out_ldx = (__u64)mm-&amp;gt;pgd;         /* BPF_LDX      */
      out_acq = load_acquire(&amp;amp;mm-&amp;gt;pgd); /* BPF_LOAD_ACQ */
      return 0;
  }
  [...]&lt;/p&gt;
&lt;p&gt;Both dereference the same pointer, but only the BPF_LDX is protected
(x86-64 JIT, jump targets shown prog-relative):&lt;/p&gt;
&lt;p&gt;[...]
  ; out_ldx = (__u64)mm-&amp;gt;pgd;
  17:   movq    $-10485760, %r10
  1e:   movq    %rsi, %r11
  21:   addq    $184, %r11
  28:   subq    %r10, %r11
  2b:   movabsq $140737498841088, %r10
  35:   cmpq    %r10, %r11
  38:   ja…&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: Reject load-acquire from pointers requiring fault protection&lt;/p&gt;
&lt;p&gt;A BPF_LOAD_ACQ is not rewritten to a BPF_PROBE_MEM load by the verifier,
unlike a regular BPF_LDX, so the JIT emits a plain load with no exception
table entry and a fault panics the kernel instead of being handled.&lt;/p&gt;
&lt;p&gt;Reject the source pointer types that a BPF_LDX would have had that fault
protection applied to, i.e. the ones bpf_convert_ctx_accesses() turns
into BPF_PROBE_MEM: a bare PTR_TO_BTF_ID, PTR_TO_BTF_ID | PTR_UNTRUSTED,
PTR_TO_BTF_ID | MEM_ALLOC | PTR_UNTRUSTED and PTR_TO_MEM | MEM_RDONLY |
PTR_UNTRUSTED.&lt;/p&gt;
&lt;p&gt;This is reachable e.g. by loading -&amp;gt;mm out of a trusted task_struct
yields an untrusted pointer to mm_struct, and it is NULL for a kernel
thread:&lt;/p&gt;
&lt;p&gt;[...]
  SEC(&amp;#34;tp_btf/sched_switch&amp;#34;)
  int BPF_PROG(demo, bool preempt, struct task_struct *prev,
               struct task_struct *next)
  {
      struct mm_struct *mm = next-&amp;gt;mm;  /* untrusted */&lt;/p&gt;
&lt;p&gt;out_ldx = (__u64)mm-&amp;gt;pgd;         /* BPF_LDX      */
      out_acq = load_acquire(&amp;amp;mm-&amp;gt;pgd); /* BPF_LOAD_ACQ */
      return 0;
  }
  [...]&lt;/p&gt;
&lt;p&gt;Both dereference the same pointer, but only the BPF_LDX is protected
(x86-64 JIT, jump targets shown prog-relative):&lt;/p&gt;
&lt;p&gt;[...]
  ; out_ldx = (__u64)mm-&amp;gt;pgd;
  17:   movq    $-10485760, %r10
  1e:   movq    %rsi, %r11
  21:   addq    $184, %r11
  28:   subq    %r10, %r11
  2b:   movabsq $140737498841088, %r10
  35:   cmpq    %r10, %r11
  38:   ja…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-90269</guid>
    </item>
  </channel>
</rss>
