<?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>Tue, 03 Nov 2026 09:23:56 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-98598 — ipv6: Prevent rt6_insert_exception() for dying fib6_info.</title>
      <link>https://db.gcve.eu/vuln/cve-2026-98598</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;ipv6: Prevent rt6_insert_exception() for dying fib6_info.&lt;/p&gt;
&lt;p&gt;Before the cited commit, fib6_nh_flush_exceptions() always set
from-&amp;gt;exception_bucket_flushed = 1 under rt6_exception_lock to
prevent rt6_insert_exception() from inserting a new exception
for a dying fib6_info.&lt;/p&gt;
&lt;p&gt;The flag was replaced with the FIB6_EXCEPTION_BUCKET_FLUSHED
bit stored in nh-&amp;gt;rt6i_exception_bucket.&lt;/p&gt;
&lt;p&gt;The problem is that now the bit is only set when the bucket
is not NULL and fib6_nh_flush_exceptions() is called from
fib6_nh_release() after fib6_ref has already reached zero.&lt;/p&gt;
&lt;p&gt;If rt6_insert_exception() is called while the target fib6_info
is being removed via fib6_purge_rt(), a new exception could be
created successfully because rt6_flush_exceptions() no longer
sets the bit.&lt;/p&gt;
&lt;p&gt;This creates a reference cycle between the fib6_info and the
exception route, leaking the fib6_info, its nexthop device,
and all per-CPU routes in fib6_nh-&amp;gt;rt6i_pcpu, which stalls netdev
unregistration.&lt;/p&gt;
&lt;p&gt;[   34.680602] unregister_netdevice: waiting for gre6 to become free. Usage count = 68
[   44.920675] unregister_netdevice: waiting for gre6 to become free. Usage count = 68
[   55.176582] unregister_netdevice: waiting for gre6 to become free. Usage count = 68&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s call fib6_drop_pcpu_from() before rt6_flush_exceptions(),
to set fib6_destroying before rt6_exception_lock, and check
f6i-&amp;gt;fib6_destroying in rt6_insert_exception().&lt;/p&gt;
&lt;p&gt;Note that FIB6_EXCEPTION_BUCKET_FLUS…&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;ipv6: Prevent rt6_insert_exception() for dying fib6_info.&lt;/p&gt;
&lt;p&gt;Before the cited commit, fib6_nh_flush_exceptions() always set
from-&amp;gt;exception_bucket_flushed = 1 under rt6_exception_lock to
prevent rt6_insert_exception() from inserting a new exception
for a dying fib6_info.&lt;/p&gt;
&lt;p&gt;The flag was replaced with the FIB6_EXCEPTION_BUCKET_FLUSHED
bit stored in nh-&amp;gt;rt6i_exception_bucket.&lt;/p&gt;
&lt;p&gt;The problem is that now the bit is only set when the bucket
is not NULL and fib6_nh_flush_exceptions() is called from
fib6_nh_release() after fib6_ref has already reached zero.&lt;/p&gt;
&lt;p&gt;If rt6_insert_exception() is called while the target fib6_info
is being removed via fib6_purge_rt(), a new exception could be
created successfully because rt6_flush_exceptions() no longer
sets the bit.&lt;/p&gt;
&lt;p&gt;This creates a reference cycle between the fib6_info and the
exception route, leaking the fib6_info, its nexthop device,
and all per-CPU routes in fib6_nh-&amp;gt;rt6i_pcpu, which stalls netdev
unregistration.&lt;/p&gt;
&lt;p&gt;[   34.680602] unregister_netdevice: waiting for gre6 to become free. Usage count = 68
[   44.920675] unregister_netdevice: waiting for gre6 to become free. Usage count = 68
[   55.176582] unregister_netdevice: waiting for gre6 to become free. Usage count = 68&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s call fib6_drop_pcpu_from() before rt6_flush_exceptions(),
to set fib6_destroying before rt6_exception_lock, and check
f6i-&amp;gt;fib6_destroying in rt6_insert_exception().&lt;/p&gt;
&lt;p&gt;Note that FIB6_EXCEPTION_BUCKET_FLUS…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-98598</guid>
    </item>
  </channel>
</rss>
