<?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:25:53 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-35798 — btrfs: fix race in read_extent_buffer_pages()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2024-35798</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: fix race in read_extent_buffer_pages()&lt;/p&gt;
&lt;p&gt;There are reports from tree-checker that detects corrupted nodes,
without any obvious pattern so possibly an overwrite in memory.
After some debugging it turns out there&amp;#39;s a race when reading an extent
buffer the uptodate status can be missed.&lt;/p&gt;
&lt;p&gt;To prevent concurrent reads for the same extent buffer,
read_extent_buffer_pages() performs these checks:&lt;/p&gt;
&lt;p&gt;/* (1) */
    if (test_bit(EXTENT_BUFFER_UPTODATE, &amp;amp;eb-&amp;gt;bflags))
        return 0;&lt;/p&gt;
&lt;p&gt;/* (2) */
    if (test_and_set_bit(EXTENT_BUFFER_READING, &amp;amp;eb-&amp;gt;bflags))
        goto done;&lt;/p&gt;
&lt;p&gt;At this point, it seems safe to start the actual read operation. Once
that completes, end_bbio_meta_read() does&lt;/p&gt;
&lt;p&gt;/* (3) */
    set_extent_buffer_uptodate(eb);&lt;/p&gt;
&lt;p&gt;/* (4) */
    clear_bit(EXTENT_BUFFER_READING, &amp;amp;eb-&amp;gt;bflags);&lt;/p&gt;
&lt;p&gt;Normally, this is enough to ensure only one read happens, and all other
callers wait for it to finish before returning.  Unfortunately, there is
a racey interleaving:&lt;/p&gt;
&lt;p&gt;Thread A | Thread B | Thread C
    ---------+----------+---------
       (1)   |          |
             |    (1)   |
       (2)   |          |
       (3)   |          |
       (4)   |          |
             |    (2)   |
             |          |    (1)&lt;/p&gt;
&lt;p&gt;When this happens, thread B kicks of an unnecessary read. Worse, thread
C will see UPTODATE set and return immediately, while the read from
thread B is still in progress.  This race could r…&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: fix race in read_extent_buffer_pages()&lt;/p&gt;
&lt;p&gt;There are reports from tree-checker that detects corrupted nodes,
without any obvious pattern so possibly an overwrite in memory.
After some debugging it turns out there&amp;#39;s a race when reading an extent
buffer the uptodate status can be missed.&lt;/p&gt;
&lt;p&gt;To prevent concurrent reads for the same extent buffer,
read_extent_buffer_pages() performs these checks:&lt;/p&gt;
&lt;p&gt;/* (1) */
    if (test_bit(EXTENT_BUFFER_UPTODATE, &amp;amp;eb-&amp;gt;bflags))
        return 0;&lt;/p&gt;
&lt;p&gt;/* (2) */
    if (test_and_set_bit(EXTENT_BUFFER_READING, &amp;amp;eb-&amp;gt;bflags))
        goto done;&lt;/p&gt;
&lt;p&gt;At this point, it seems safe to start the actual read operation. Once
that completes, end_bbio_meta_read() does&lt;/p&gt;
&lt;p&gt;/* (3) */
    set_extent_buffer_uptodate(eb);&lt;/p&gt;
&lt;p&gt;/* (4) */
    clear_bit(EXTENT_BUFFER_READING, &amp;amp;eb-&amp;gt;bflags);&lt;/p&gt;
&lt;p&gt;Normally, this is enough to ensure only one read happens, and all other
callers wait for it to finish before returning.  Unfortunately, there is
a racey interleaving:&lt;/p&gt;
&lt;p&gt;Thread A | Thread B | Thread C
    ---------+----------+---------
       (1)   |          |
             |    (1)   |
       (2)   |          |
       (3)   |          |
       (4)   |          |
             |    (2)   |
             |          |    (1)&lt;/p&gt;
&lt;p&gt;When this happens, thread B kicks of an unnecessary read. Worse, thread
C will see UPTODATE set and return immediately, while the read from
thread B is still in progress.  This race could r…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2024-35798</guid>
    </item>
  </channel>
</rss>
