<?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>Tue, 29 Sep 2026 04:47:48 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-97902 — fs: don't return -EINVAL for successful nested thaw</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-97902</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;fs: don&amp;#39;t return -EINVAL for successful nested thaw&lt;/p&gt;
&lt;p&gt;Commit 7366f8b6fc6a (&amp;#34;fs: handle freezing from multiple devices&amp;#34;)
replaced the freeze_holders bitmask with per-holder counters to allow
nested freezes. In the bitmask version, a thaw that released a shared
hold while another holder remained returned 0. Since the rework,
thaw_super_locked() drops the freeze reference via freeze_dec() but
then returns -EINVAL when other freezers remain, misinforming the
caller: the thaw did succeed, the superblock just stays frozen for the
remaining holders.&lt;/p&gt;
&lt;p&gt;This breaks bdev-initiated freezing. When a filesystem is frozen with
FIFREEZE and additionally frozen via bdev_freeze() -- which nests by
design, see fs_bdev_freeze() -- the subsequent bdev_thaw() receives
-EINVAL from the holder op although its freeze reference was dropped,
and therefore keeps bd_fsfreeze_count elevated. Then device-mapper&amp;#39;s
unlock_fs() ignores bdev_thaw()&amp;#39;s return value, so nothing rebalances
the count. After the user&amp;#39;s FITHAW and umount, the block device can
never be mounted again:&lt;/p&gt;
&lt;p&gt;dm-1: Can&amp;#39;t mount, blockdev is frozen&lt;/p&gt;
&lt;p&gt;There is no way for userspace to drop the leaked count; only
destroying the block device (or a reboot) recovers the device.&lt;/p&gt;
&lt;p&gt;Reproducer (any kernel since v6.8):&lt;/p&gt;
&lt;p&gt;dmsetup create dut --table &amp;#34;0 $(blockdev --getsz &amp;#34;$DEV&amp;#34;) linear $DEV 0&amp;#34;
    mkfs.ext4 /dev/mapper/dut
    mount /dev/mapper/dut /mnt
    fsfreeze --freeze /mnt…&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;fs: don&amp;#39;t return -EINVAL for successful nested thaw&lt;/p&gt;
&lt;p&gt;Commit 7366f8b6fc6a (&amp;#34;fs: handle freezing from multiple devices&amp;#34;)
replaced the freeze_holders bitmask with per-holder counters to allow
nested freezes. In the bitmask version, a thaw that released a shared
hold while another holder remained returned 0. Since the rework,
thaw_super_locked() drops the freeze reference via freeze_dec() but
then returns -EINVAL when other freezers remain, misinforming the
caller: the thaw did succeed, the superblock just stays frozen for the
remaining holders.&lt;/p&gt;
&lt;p&gt;This breaks bdev-initiated freezing. When a filesystem is frozen with
FIFREEZE and additionally frozen via bdev_freeze() -- which nests by
design, see fs_bdev_freeze() -- the subsequent bdev_thaw() receives
-EINVAL from the holder op although its freeze reference was dropped,
and therefore keeps bd_fsfreeze_count elevated. Then device-mapper&amp;#39;s
unlock_fs() ignores bdev_thaw()&amp;#39;s return value, so nothing rebalances
the count. After the user&amp;#39;s FITHAW and umount, the block device can
never be mounted again:&lt;/p&gt;
&lt;p&gt;dm-1: Can&amp;#39;t mount, blockdev is frozen&lt;/p&gt;
&lt;p&gt;There is no way for userspace to drop the leaked count; only
destroying the block device (or a reboot) recovers the device.&lt;/p&gt;
&lt;p&gt;Reproducer (any kernel since v6.8):&lt;/p&gt;
&lt;p&gt;dmsetup create dut --table &amp;#34;0 $(blockdev --getsz &amp;#34;$DEV&amp;#34;) linear $DEV 0&amp;#34;
    mkfs.ext4 /dev/mapper/dut
    mount /dev/mapper/dut /mnt
    fsfreeze --freeze /mnt…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-97902</guid>
    </item>
  </channel>
</rss>
