<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-02T10:11:52.410380+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/cve-2026-72112</id>
    <title>CVE-2026-72112 — io_uring/bpf-ops: reject re-registration of an already-bound ops</title>
    <updated>2026-10-02T10:11:53.185466+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Linux</p>
<p>In the Linux kernel, the following vulnerability has been resolved:</p>
<p>io_uring/bpf-ops: reject re-registration of an already-bound ops</p>
<p>io_install_bpf() only rejects a second registration on the ctx side
(ctx-&gt;bpf_ops) and sets the per-map back-pointer ops-&gt;priv
unconditionally. The struct_ops link path never advances a map past
BPF_STRUCT_OPS_STATE_READY, so the same io_uring_bpf_ops map can be
registered more than once, and bpf_io_reg() re-resolves the target ring
via fget(ops-&gt;ring_fd) on every call. A caller can therefore point the
same ring_fd at a different io_ring_ctx between two BPF_LINK_CREATE
calls.</p>
<p>The second registration passes the ctx-&gt;bpf_ops check (the new ctx has
none) and overwrites ops-&gt;priv, orphaning the first ctx. Teardown
(io_eject_bpf()/bpf_io_unreg()) only reaches a ctx through ops-&gt;priv, so
the orphaned ctx is never torn down: its ctx-&gt;loop_step keeps pointing
into the struct_ops trampoline, which is freed once the map is gone. A
later io_uring_enter() on the orphaned ring then calls the dangling
ctx-&gt;loop_step from io_run_loop() -- a use-after-free of freed
executable memory, reachable by a task with CAP_BPF + CAP_PERFMON.</p>
<p>Reject registration when ops-&gt;priv is already set, as hid_bpf_reg()
does for its struct_ops.</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/cve-2026-72112"/>
  </entry>
</feed>
