<?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://cve.radiocsirt.org</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, 06 Oct 2026 22:13:45 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-41067 — btrfs: scrub: handle RST lookup error correctly</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2024-41067</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;btrfs: scrub: handle RST lookup error correctly&lt;/p&gt;
&lt;p&gt;[BUG]
When running btrfs/060 with forced RST feature, it would crash the
following ASSERT() inside scrub_read_endio():&lt;/p&gt;
&lt;p&gt;ASSERT(sector_nr &amp;lt; stripe-&amp;gt;nr_sectors);&lt;/p&gt;
&lt;p&gt;Before that, we would have tree dump from
btrfs_get_raid_extent_offset(), as we failed to find the RST entry for
the range.&lt;/p&gt;
&lt;p&gt;[CAUSE]
Inside scrub_submit_extent_sector_read() every time we allocated a new
bbio we immediately called btrfs_map_block() to make sure there was some
RST range covering the scrub target.&lt;/p&gt;
&lt;p&gt;But if btrfs_map_block() fails, we immediately call endio for the bbio,
while the bbio is newly allocated, it&amp;#39;s completely empty.&lt;/p&gt;
&lt;p&gt;Then inside scrub_read_endio(), we go through the bvecs to find
the sector number (as bi_sector is no longer reliable if the bio is
submitted to lower layers).&lt;/p&gt;
&lt;p&gt;And since the bio is empty, such bvecs iteration would not find any
sector matching the sector, and return sector_nr == stripe-&amp;gt;nr_sectors,
triggering the ASSERT().&lt;/p&gt;
&lt;p&gt;[FIX]
Instead of calling btrfs_map_block() after allocating a new bbio, call
btrfs_map_block() first.&lt;/p&gt;
&lt;p&gt;Since our only objective of calling btrfs_map_block() is only to update
stripe_len, there is really no need to do that after btrfs_alloc_bio().&lt;/p&gt;
&lt;p&gt;This new timing would avoid the problem of handling empty bbio
completely, and in fact fixes a possible race window for the old code,
where if the submission thread is the only owner of the pending_…&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;btrfs: scrub: handle RST lookup error correctly&lt;/p&gt;
&lt;p&gt;[BUG]
When running btrfs/060 with forced RST feature, it would crash the
following ASSERT() inside scrub_read_endio():&lt;/p&gt;
&lt;p&gt;ASSERT(sector_nr &amp;lt; stripe-&amp;gt;nr_sectors);&lt;/p&gt;
&lt;p&gt;Before that, we would have tree dump from
btrfs_get_raid_extent_offset(), as we failed to find the RST entry for
the range.&lt;/p&gt;
&lt;p&gt;[CAUSE]
Inside scrub_submit_extent_sector_read() every time we allocated a new
bbio we immediately called btrfs_map_block() to make sure there was some
RST range covering the scrub target.&lt;/p&gt;
&lt;p&gt;But if btrfs_map_block() fails, we immediately call endio for the bbio,
while the bbio is newly allocated, it&amp;#39;s completely empty.&lt;/p&gt;
&lt;p&gt;Then inside scrub_read_endio(), we go through the bvecs to find
the sector number (as bi_sector is no longer reliable if the bio is
submitted to lower layers).&lt;/p&gt;
&lt;p&gt;And since the bio is empty, such bvecs iteration would not find any
sector matching the sector, and return sector_nr == stripe-&amp;gt;nr_sectors,
triggering the ASSERT().&lt;/p&gt;
&lt;p&gt;[FIX]
Instead of calling btrfs_map_block() after allocating a new bbio, call
btrfs_map_block() first.&lt;/p&gt;
&lt;p&gt;Since our only objective of calling btrfs_map_block() is only to update
stripe_len, there is really no need to do that after btrfs_alloc_bio().&lt;/p&gt;
&lt;p&gt;This new timing would avoid the problem of handling empty bbio
completely, and in fact fixes a possible race window for the old code,
where if the submission thread is the only owner of the pending_…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2024-41067</guid>
    </item>
  </channel>
</rss>
