# CVE-2026-43299: btrfs: do not ASSERT() when the fs flips RO inside btrfs_repair_io_failure()

CVE-2026-43299 is fixed in 16 products on 1 platform, first by DEBIAN-CVE-2026-43299, released May 15, 2026. It is not reported as exploited. Patch Radar priority: Routine.

- Web page: https://patchblox.com/security/cve/CVE-2026-43299
- Priority: Routine
- CVSS: 5.5 (Moderate)
- EPSS: 0.0013
- CISA KEV: not listed
- Exploited (vendor report): no
- Publicly disclosed: no
- Published: May 8, 2026
- Vendor advisory: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-43299

## Description

In the Linux kernel, the following vulnerability has been resolved:  btrfs: do not ASSERT() when the fs flips RO inside btrfs_repair_io_failure()  [BUG] There is a bug report that when btrfs hits ENOSPC error in a critical path, btrfs flips RO (this part is expected, although the ENOSPC bug still needs to be addressed).  The problem is after the RO flip, if there is a read repair pending, we can hit the ASSERT() inside btrfs_repair_io_failure() like the following:    BTRFS info (device vdc): relocating block group 30408704 flags metadata|raid1   ------------[ cut here ]------------   BTRFS: Transaction aborted (error -28)   WARNING: fs/btrfs/extent-tree.c:3235 at __btrfs_free_extent.isra.0+0x453/0xfd0, CPU#1: btrfs/383844   Modules linked in: kvm_intel kvm irqbypass   [...]   ---[ end trace 0000000000000000 ]---   BTRFS info (device vdc state EA): 2 enospc errors during balance   BTRFS info (device vdc state EA): balance: ended with status: -30   BTRFS error (device vdc state EA): parent transid verify failed on logical 30556160 mirror 2 wanted 8 found 6   BTRFS error (device vdc state EA): bdev /dev/nvme0n1 errs: wr 0, rd 0, flush 0, corrupt 10, gen 0   [...]   assertion failed: !(fs_info->sb->s_flags & SB_RDONLY) :: 0, in fs/btrfs/bio.c:938   ------------[ cut here ]------------   assertion failed: !(fs_info->sb->s_flags & SB_RDONLY) :: 0, in fs/btrfs/bio.c:938   kernel BUG at fs/btrfs/bio.c:938!   Oops: invalid opcode: 0000 [#1] SMP NOPTI   CPU: 0 UID: 0 PID: 868 Comm: kworker/u8:13 Tainted: G        W        N  6.19.0-rc6+ #4788 PREEMPT(full)   Tainted: [W]=WARN, [N]=TEST   Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014   Workqueue: btrfs-endio simple_end_io_work   RIP: 0010:btrfs_repair_io_failure.cold+0xb2/0x120   RSP: 0000:ffffc90001d2bcf0 EFLAGS: 00010246   RAX: 0000000000000051 RBX: 0000000000001000 RCX: 0000000000000000   RDX: 0000000000000000 RSI: ffffffff8305cf42 RDI: 00000000ffffffff   RBP: 0000000000000002 R08: 00000000fffeffff R09: ffffffff837fa988   R10: ffffffff8327a9e0 R11: 6f69747265737361 R12: ffff88813018d310   R13: ffff888168b8a000 R14: ffffc90001d2bd90 R15: ffff88810a169000   FS:  0000000000000000(0000) GS:ffff8885e752c000(0000) knlGS:0000000000000000   CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033   ------------[ cut here ]------------  [CAUSE] The cause of -ENOSPC error during the test case btrfs/124 is still unknown, although it's known that we still have cases where metadata can be over-committed but can not be fulfilled correctly, thus if we hit such ENOSPC error inside a critical path, we have no choice but abort the current transaction.  This will mark the fs read-only.  The problem is inside the btrfs_repair_io_failure() path that we require the fs not to be mount read-only. This is normally fine, but if we are doing a read-repair meanwhile the fs flips RO due to a critical error, we can enter btrfs_repair_io_failure() with super block set to read-only, thus triggering the above crash.  [FIX] Just replace the ASSERT() with a proper return if the fs is already read-only.

## Where it's fixed

| Platform | Product | Fixed in | Fix | Released |
|---|---|---|---|---|
| Linux | dtb-aarch64 opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-64kb opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-64kb sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-64kb sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-azure opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-azure sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-azure sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-default opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-default sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-default sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-default-base opensuse-leap 16.0 | 6.12.0-160000.38.1.160000.2.22 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-default-base sles 15.7 | 6.4.0-150700.53.87.3.150700.17.49.2 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-default-base sles 16.0 | 6.12.0-160000.38.1.160000.2.23 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-docs opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-docs sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-docs sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-kvmsmall opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-kvmsmall sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-livepatch-SLE15-SP7-RT_Update_22 sles 15.7 | 1-150700.1.3.1 | [SUSE-SU-2026:4940-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4940-1.md) | Nov 7, 2026 |
| Linux | kernel-livepatch-SLE15-SP7_Update_23 sles 15.7 | 1-150700.15.3.2 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-obs-build opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-obs-build sles 15.7 | 6.4.0-150700.53.87.2 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-obs-qa opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-obs-qa sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-rt opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-source opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-source sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-source sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-syms opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-syms sles 15.7 | 6.4.0-150700.53.87.1 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-syms sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | kernel-zfcpdump opensuse-leap 16.0 | 6.12.0-160000.38.1 | [OPENSUSE-SU-2026:21910-1](https://patchblox.com/security/data/fix/linux/opensuse-su-2026-21910-1.md) | Sep 22, 2026 |
| Linux | kernel-zfcpdump sles 15.7 | 6.4.0-150700.53.87.3 | [SUSE-SU-2026:4935-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-4935-1.md) | Nov 7, 2026 |
| Linux | kernel-zfcpdump sles 16.0 | 6.12.0-160000.38.1 | [SUSE-SU-2026:23902-1](https://patchblox.com/security/data/fix/linux/suse-su-2026-23902-1.md) | Sep 22, 2026 |
| Linux | linux Debian 13.5 (trixie) | 6.12.115-2 | [DEBIAN-CVE-2026-43299](https://patchblox.com/security/data/fix/linux/debian-cve-2026-43299.md) | May 15, 2026 |
| Linux | linux Debian 14 | 6.19.6-1 | [DEBIAN-CVE-2026-43299](https://patchblox.com/security/data/fix/linux/debian-cve-2026-43299.md) | May 15, 2026 |

---

Data as of 2026-11-08T06:59:42Z UTC. Source: Patchblox Patch Radar (https://patchblox.com/security/patch-radar). Patchblox finds out-of-date software on Windows, macOS and Linux and updates it through release rings: https://patchblox.com/demo

Free to use with attribution: show "Data: Patchblox Patch Radar" with a link to https://patchblox.com/security/patch-radar. Terms, including what needs a written agreement: https://patchblox.com/security/patch-radar/use-the-data

Product names, logos and trademarks shown on Patch Radar belong to their respective owners. They are used only to identify the software each security fix applies to and to help readers find their platform. Their use does not imply any affiliation with, or endorsement by, those owners, and Patchblox is not affiliated with any of them.
