<?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>Wed, 30 Sep 2026 03:39:48 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-53122 — btrfs: fix deadlock between reflink and transaction commit when using flushoncommit</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-53122</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 deadlock between reflink and transaction commit when using flushoncommit&lt;/p&gt;
&lt;p&gt;When using the flushoncommit mount option, we can have a deadlock between
a transaction commit and a reflink operation that copied an inline extent
to an offset beyond the current i_size of the destination node.&lt;/p&gt;
&lt;p&gt;The deadlock happens like this:&lt;/p&gt;
&lt;p&gt;1) Task A clones an inline extent from inode X to an offset of inode Y
   that is beyond Y&amp;#39;s current i_size. This means we copied the inline
   extent&amp;#39;s data to a folio of inode Y that is beyond its EOF, using a
   call to copy_inline_to_page();&lt;/p&gt;
&lt;p&gt;2) Task B starts a transaction commit and calls
   btrfs_start_delalloc_flush() to flush delalloc;&lt;/p&gt;
&lt;p&gt;3) The delalloc flushing sees the new dirty folio of inode Y and when it
   attempts to flush it, it ends up at extent_writepage() and sees that
   the offset of the folio is beyond the i_size of inode Y, so it attempts
   to invalidate the folio by calling folio_invalidate(), which ends up at
   btrfs&amp;#39; folio invalidate callback - btrfs_invalidate_folio(). There it
   tries to lock the folio&amp;#39;s range in inode Y&amp;#39;s extent io tree, but it
   blocks since it&amp;#39;s currently locked by task A - during a reflink we lock
   the inodes and the source and destination ranges after flushing all
   delalloc and waiting for ordered extent completion - after that we
   don&amp;#39;t expect to have dirty folios in the ranges, the exception is if
   we have to copy an inl…&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 deadlock between reflink and transaction commit when using flushoncommit&lt;/p&gt;
&lt;p&gt;When using the flushoncommit mount option, we can have a deadlock between
a transaction commit and a reflink operation that copied an inline extent
to an offset beyond the current i_size of the destination node.&lt;/p&gt;
&lt;p&gt;The deadlock happens like this:&lt;/p&gt;
&lt;p&gt;1) Task A clones an inline extent from inode X to an offset of inode Y
   that is beyond Y&amp;#39;s current i_size. This means we copied the inline
   extent&amp;#39;s data to a folio of inode Y that is beyond its EOF, using a
   call to copy_inline_to_page();&lt;/p&gt;
&lt;p&gt;2) Task B starts a transaction commit and calls
   btrfs_start_delalloc_flush() to flush delalloc;&lt;/p&gt;
&lt;p&gt;3) The delalloc flushing sees the new dirty folio of inode Y and when it
   attempts to flush it, it ends up at extent_writepage() and sees that
   the offset of the folio is beyond the i_size of inode Y, so it attempts
   to invalidate the folio by calling folio_invalidate(), which ends up at
   btrfs&amp;#39; folio invalidate callback - btrfs_invalidate_folio(). There it
   tries to lock the folio&amp;#39;s range in inode Y&amp;#39;s extent io tree, but it
   blocks since it&amp;#39;s currently locked by task A - during a reflink we lock
   the inodes and the source and destination ranges after flushing all
   delalloc and waiting for ordered extent completion - after that we
   don&amp;#39;t expect to have dirty folios in the ranges, the exception is if
   we have to copy an inl…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-53122</guid>
    </item>
  </channel>
</rss>
