<?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>Fri, 02 Oct 2026 15:48:56 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-45025 — fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2024-45025</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;fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE&lt;/p&gt;
&lt;p&gt;copy_fd_bitmaps(new, old, count) is expected to copy the first
count/BITS_PER_LONG bits from old-&amp;gt;full_fds_bits[] and fill
the rest with zeroes.  What it does is copying enough words
(BITS_TO_LONGS(count/BITS_PER_LONG)), then memsets the rest.
That works fine, *if* all bits past the cutoff point are
clear.  Otherwise we are risking garbage from the last word
we&amp;#39;d copied.&lt;/p&gt;
&lt;p&gt;For most of the callers that is true - expand_fdtable() has
count equal to old-&amp;gt;max_fds, so there&amp;#39;s no open descriptors
past count, let alone fully occupied words in -&amp;gt;open_fds[],
which is what bits in -&amp;gt;full_fds_bits[] correspond to.&lt;/p&gt;
&lt;p&gt;The other caller (dup_fd()) passes sane_fdtable_size(old_fdt, max_fds),
which is the smallest multiple of BITS_PER_LONG that covers all
opened descriptors below max_fds.  In the common case (copying on
fork()) max_fds is ~0U, so all opened descriptors will be below
it and we are fine, by the same reasons why the call in expand_fdtable()
is safe.&lt;/p&gt;
&lt;p&gt;Unfortunately, there is a case where max_fds is less than that
and where we might, indeed, end up with junk in -&amp;gt;full_fds_bits[] -
close_range(from, to, CLOSE_RANGE_UNSHARE) with
	* descriptor table being currently shared
	* &amp;#39;to&amp;#39; being above the current capacity of descriptor table
	* &amp;#39;from&amp;#39; being just under some chunk of opened descriptors.
In that case we end up with observably wrong behaviour - e.g.…&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;fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE&lt;/p&gt;
&lt;p&gt;copy_fd_bitmaps(new, old, count) is expected to copy the first
count/BITS_PER_LONG bits from old-&amp;gt;full_fds_bits[] and fill
the rest with zeroes.  What it does is copying enough words
(BITS_TO_LONGS(count/BITS_PER_LONG)), then memsets the rest.
That works fine, *if* all bits past the cutoff point are
clear.  Otherwise we are risking garbage from the last word
we&amp;#39;d copied.&lt;/p&gt;
&lt;p&gt;For most of the callers that is true - expand_fdtable() has
count equal to old-&amp;gt;max_fds, so there&amp;#39;s no open descriptors
past count, let alone fully occupied words in -&amp;gt;open_fds[],
which is what bits in -&amp;gt;full_fds_bits[] correspond to.&lt;/p&gt;
&lt;p&gt;The other caller (dup_fd()) passes sane_fdtable_size(old_fdt, max_fds),
which is the smallest multiple of BITS_PER_LONG that covers all
opened descriptors below max_fds.  In the common case (copying on
fork()) max_fds is ~0U, so all opened descriptors will be below
it and we are fine, by the same reasons why the call in expand_fdtable()
is safe.&lt;/p&gt;
&lt;p&gt;Unfortunately, there is a case where max_fds is less than that
and where we might, indeed, end up with junk in -&amp;gt;full_fds_bits[] -
close_range(from, to, CLOSE_RANGE_UNSHARE) with
	* descriptor table being currently shared
	* &amp;#39;to&amp;#39; being above the current capacity of descriptor table
	* &amp;#39;from&amp;#39; being just under some chunk of opened descriptors.
In that case we end up with observably wrong behaviour - e.g.…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2024-45025</guid>
    </item>
  </channel>
</rss>
