<?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 14:29:00 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-74677 — net: usb: ipheth: fix carrier_work UAF on disconnect</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-74677</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;net: usb: ipheth: fix carrier_work UAF on disconnect&lt;/p&gt;
&lt;p&gt;ipheth_sndbulk_callback() re-arms the carrier-check work on any
non-zero URB status:&lt;/p&gt;
&lt;p&gt;else
		schedule_delayed_work(&amp;amp;dev-&amp;gt;carrier_work, 0);&lt;/p&gt;
&lt;p&gt;Nothing ties that to the interface being up, so the work can be armed
again after ipheth_close() has already drained it, and stay armed
until the netdev whose private area embeds it is freed.&lt;/p&gt;
&lt;p&gt;On unplug with a TX URB in flight, ipheth_disconnect() drains the work
through unregister_netdev() -&amp;gt; ipheth_close() -&amp;gt;
cancel_delayed_work_sync() and only then calls ipheth_kill_urbs().
usb_kill_urb() completes the in-flight TX URB with -ENOENT, so
ipheth_sndbulk_callback() runs after the drain and re-arms
carrier_work.&lt;/p&gt;
&lt;p&gt;The same completion also re-arms the work if the interface is only
brought down while a TX URB is in flight, and
ipheth_carrier_check_work() then keeps re-queueing itself once a
second. unregister_netdev() does not call ipheth_close() for an
already-down interface, so nothing drains it on the later unplug
either.&lt;/p&gt;
&lt;p&gt;In both cases free_netdev() frees the netdev while carrier_work is
still pending, and ipheth_carrier_check_work() dereferences freed
memory.&lt;/p&gt;
&lt;p&gt;Tie the work to the interface state instead of chasing the completion:
disable it in ipheth_close() and enable it in ipheth_open(), so a
schedule_delayed_work() from the URB completion is a no-op whenever
the interface is not up. disable_delayed_work_sync() al…&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;net: usb: ipheth: fix carrier_work UAF on disconnect&lt;/p&gt;
&lt;p&gt;ipheth_sndbulk_callback() re-arms the carrier-check work on any
non-zero URB status:&lt;/p&gt;
&lt;p&gt;else
		schedule_delayed_work(&amp;amp;dev-&amp;gt;carrier_work, 0);&lt;/p&gt;
&lt;p&gt;Nothing ties that to the interface being up, so the work can be armed
again after ipheth_close() has already drained it, and stay armed
until the netdev whose private area embeds it is freed.&lt;/p&gt;
&lt;p&gt;On unplug with a TX URB in flight, ipheth_disconnect() drains the work
through unregister_netdev() -&amp;gt; ipheth_close() -&amp;gt;
cancel_delayed_work_sync() and only then calls ipheth_kill_urbs().
usb_kill_urb() completes the in-flight TX URB with -ENOENT, so
ipheth_sndbulk_callback() runs after the drain and re-arms
carrier_work.&lt;/p&gt;
&lt;p&gt;The same completion also re-arms the work if the interface is only
brought down while a TX URB is in flight, and
ipheth_carrier_check_work() then keeps re-queueing itself once a
second. unregister_netdev() does not call ipheth_close() for an
already-down interface, so nothing drains it on the later unplug
either.&lt;/p&gt;
&lt;p&gt;In both cases free_netdev() frees the netdev while carrier_work is
still pending, and ipheth_carrier_check_work() dereferences freed
memory.&lt;/p&gt;
&lt;p&gt;Tie the work to the interface state instead of chasing the completion:
disable it in ipheth_close() and enable it in ipheth_open(), so a
schedule_delayed_work() from the URB completion is a no-op whenever
the interface is not up. disable_delayed_work_sync() al…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-74677</guid>
    </item>
  </channel>
</rss>
