{"id":25678,"date":"2026-09-18T04:31:43","date_gmt":"2026-09-17T20:31:43","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90269"},"modified":"2026-09-18T04:31:43","modified_gmt":"2026-09-17T20:31:43","slug":"cve-2026-90269","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90269","title":{"rendered":"CVE-2026-90269 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Reject load-acqu"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>bpf: Reject load-acquire from pointers requiring fault protection<\/p>\n<p>A BPF_LOAD_ACQ is not rewritten to a BPF_PROBE_MEM load by the verifier,<br \/>\nunlike a regular BPF_LDX, so the JIT emits a plain load with no exception<br \/>\ntable entry and a fault panics the kernel instead of being handled.<\/p>\n<p>Reject the source pointer types that a BPF_LDX would have had that fault<br \/>\nprotection applied to, i.e. the ones bpf_convert_ctx_accesses() turns<br \/>\ninto BPF_PROBE_MEM: a bare PTR_TO_BTF_ID, PTR_TO_BTF_ID | PTR_UNTRUSTED,<br \/>\nPTR_TO_BTF_ID | MEM_ALLOC | PTR_UNTRUSTED and PTR_TO_MEM | MEM_RDONLY |<br \/>\nPTR_UNTRUSTED.<\/p>\n<p>This is reachable e.g. by loading -&gt;mm out of a trusted task_struct<br \/>\nyields an untrusted pointer to mm_struct, and it is NULL for a kernel<br \/>\nthread:<\/p>\n<p>  [&#8230;]<br \/>\n  SEC(&#8220;tp_btf\/sched_switch&#8221;)<br \/>\n  int BPF_PROG(demo, bool preempt, struct task_struct *prev,<br \/>\n               struct task_struct *next)<br \/>\n  {<br \/>\n      struct mm_struct *mm = next-&gt;mm;  \/* untrusted *\/<\/p>\n<p>      out_ldx = (__u64)mm-&gt;pgd;         \/* BPF_LDX      *\/<br \/>\n      out_acq = load_acquire(&amp;mm-&gt;pgd); \/* BPF_LOAD_ACQ *\/<br \/>\n      return 0;<br \/>\n  }<br \/>\n  [&#8230;]<\/p>\n<p>Both dereference the same pointer, but only the BPF_LDX is protected<br \/>\n(x86-64 JIT, jump targets shown prog-relative):<\/p>\n<p>  [&#8230;]<br \/>\n  ; out_ldx = (__u64)mm-&gt;pgd;<br \/>\n  17:   movq    $-10485760, %r10<br \/>\n  1e:   movq    %rsi, %r11<br \/>\n  21:   addq    $184, %r11<br \/>\n  28:   subq    %r10, %r11<br \/>\n  2b:   movabsq $140737498841088, %r10<br \/>\n  35:   cmpq    %r10, %r11<br \/>\n  38:   ja      0x3e                 &lt;&#8211; kernel addr?<br \/>\n  3a:   xorl    %edi, %edi           &lt;&#8211; no: dst = 0, skip the load<br \/>\n  3c:   jmp     0x45<br \/>\n  3e:   movq    184(%rsi), %rdi      pgd)<br \/>\n  53:\tmovq    %rsi, %rdi<br \/>\n  56:\tmovq    184(%rdi), %rax       &lt;&#8211; no check, no extable entry<br \/>\n  [&#8230;]<\/p>\n<p>Note that BPF_PROBE_MEM is not visible in a bpftool xlated dump, as<br \/>\nbpf_insn_prepare_dump() rewrites it back to BPF_MEM.<\/p>\n<p>A PTR_TRUSTED pointer is deliberately not on the list. Such a load is<br \/>\nnot converted either, but it does not need to be, since the pointer is<br \/>\nguaranteed live, so load-acquire from it stays allowed.<\/p>\n<p>The check is gated on BPF_LOAD_ACQ so that atomic RMW and store-release<br \/>\nerror messages are unchanged; writes (RMW \/ store-release) to such<br \/>\npointers are already rejected elsewhere, so only load-acquire needs this.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>bpf: Reject load-acquire from pointers requiring fault protection<\/p>\n<p>A BPF_LOAD_ACQ is not rewritten to a BPF_PROBE_MEM load by the v<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25678","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25678","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=25678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}