Description
In the Linux kernel, the following vulnerability has been resolved:
btrfs: get rid of warning on transaction commit when using flushoncommit
When using the flushoncommit mount option, during almost every transaction
commit we trigger a warning from __writeback_inodes_sb_nr():
$ cat fs/fs-writeback.c:
(...)
static void __writeback_inodes_sb_nr(struct super_block *sb, ...
{
(...)
WARN_ON(!rwsem_is_locked(&sb->s_umount));
(...)
}
(...)
The trace produced in dmesg looks like the following:
[947.473890] WARNING: CPU: 5 PID: 930 at fs/fs-writeback.c:2610 __writeback_inodes_sb_nr+0x7e/0xb3
[947.481623] Modules linked in: nfsd nls_cp437 cifs asn1_decoder cifs_arc4 fscache cifs_md4 ipmi_ssif
[947.489571] CPU: 5 PID: 930 Comm: btrfs-transacti Not tainted 95.16.3-srb-asrock-00001-g36437ad63879 #186
[947.497969] RIP: 0010:__writeback_inodes_sb_nr+0x7e/0xb3
[947.502097] Code: 24 10 4c 89 44 24 18 c6 (...)
[947.519760] RSP: 0018:ffffc90000777e10 EFLAGS: 00010246
[947.523818] RAX: 0000000000000000 RBX: 0000000000963300 RCX: 0000000000000000
[947.529765] RDX: 0000000000000000 RSI: 000000000000fa51 RDI: ffffc90000777e50
[947.535740] RBP: ffff888101628a90 R08: ffff888100955800 R09: ffff888100956000
[947.541701] R10: 0000000000000002 R11: 0000000000000001 R12: ffff888100963488
[947.547645] R13: ffff888100963000 R14: ffff888112fb7200 R15: ffff888100963460
[947.553621] FS: 0000000000000000(0000) GS:ffff88841fd40000(0000) knlGS:0000000000000000
[947.560537] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[947.565122] CR2: 0000000008be50c4 CR3: 000000000220c000 CR4: 00000000001006e0
[947.571072] Call Trace:
[947.572354] <TASK>
[947.573266] btrfs_commit_transaction+0x1f1/0x998
[947.576785] ? start_transaction+0x3ab/0x44e
[947.579867] ? schedule_timeout+0x8a/0xdd
[947.582716] transaction_kthread+0xe9/0x156
[947.585721] ? btrfs_cleanup_transaction.isra.0+0x407/0x407
[947.590104] kthread+0x131/0x139
[947.592168] ? set_kthread_struct+0x32/0x32
[947.595174] ret_from_fork+0x22/0x30
[947.597561] </TASK>
[947.598553] ---[ end trace 644721052755541c ]---
This is because we started using writeback_inodes_sb() to flush delalloc
when committing a transaction (when using -o flushoncommit), in order to
avoid deadlocks with filesystem freeze operations. This change was made
by commit ce8ea7cc6eb313 ("btrfs: don't call btrfs_start_delalloc_roots
in flushoncommit"). After that change we started producing that warning,
and every now and then a user reports this since the warning happens too
often, it spams dmesg/syslog, and a user is unsure if this reflects any
problem that might compromise the filesystem's reliability.
We can not just lock the sb->s_umount semaphore before calling
writeback_inodes_sb(), because that would at least deadlock with
filesystem freezing, since at fs/super.c:freeze_super() sync_filesystem()
is called while we are holding that semaphore in write mode, and that can
trigger a transaction commit, resulting in a deadlock. It would also
trigger the same type of deadlock in the unmount path. Possibly, it could
also introduce some other locking dependencies that lockdep would report.
To fix this call try_to_writeback_inodes_sb() instead of
writeback_inodes_sb(), because that will try to read lock sb->s_umount
and then will only call writeback_inodes_sb() if it was able to lock it.
This is fine because the cases where it can't read lock sb->s_umount
are during a filesystem unmount or during a filesystem freeze - in those
cases sb->s_umount is write locked and sync_filesystem() is called, which
calls writeback_inodes_sb(). In other words, in all cases where we can't
take a read lock on sb->s_umount, writeback is already being triggered
elsewhere.
An alternative would be to call btrfs_start_delalloc_roots() with a
number of pages different from LONG_MAX, for example matching the number
of delalloc bytes we currently have, in
---truncated---
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| Linux | Linux | 4.15 | 5.15.27 |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | linux | 5.16.14-1 | — |
| Debian 13 | linux | 5.16.14-1 | — |
| Debian 12 | linux | 5.16.14-1 | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 24.04 LTS | linux-raspi-realtime | No fix yet | — |
| Ubuntu 22.04 LTS | linux-riscv +31 | No fix yet | — |
| Ubuntu 20.04 LTS | linux-gke +27 | No fix yet | — |
| Ubuntu 20.04 LTS | linux-intel-iotg-5.15 | 5.15.0-1008.11~20.04.1 | — |
| Ubuntu 18.04 LTS | linux-gcp +14 | No fix yet | — |
| Ubuntu 16.04 LTS | linux-hwe-edge | No fix yet | — |
Show 8 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu Pro FIPS 20.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS 18.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS-updates 20.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS-updates 18.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro 20.04 LTS | linux +10 | No fix yet | — |
| Ubuntu Pro 18.04 LTS | linux +12 | No fix yet | — |
| Ubuntu Pro 16.04 LTS | linux-gcp +4 | No fix yet | — |
| Ubuntu Pro 14.04 LTS | linux-azure | No fix yet | — |
SUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES 15 SP5 | kernel-64kb +4 | 5.14.21-150500.55.80.2 | SUSE-SU-2024:3483-1 |
| SLES 15 SP5 | kernel-azure +2 | 5.14.21-150500.33.66.1 | SUSE-SU-2024:3190-1 |
| SLES 15 SP5 | kernel-default-base | 5.14.21-150500.55.80.2.150500.6.35.6 | SUSE-SU-2024:3483-1 |
| SLES 15 SP5 | kernel-syms +1 | 5.14.21-150500.55.80.1 | SUSE-SU-2024:3483-1 |
| SLES 12 SP5 | kernel-azure +2 | 4.12.14-16.197.1 | SUSE-SU-2024:3252-1 |
| SLES 12 SP5 | kernel-docs +1 | 4.12.14-122.228.2 | SUSE-SU-2024:3251-1 |
| SLES 12 SP5 | kernel-syms +2 | 4.12.14-122.228.1 | SUSE-SU-2024:3251-1 |
Show 6 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES for SAP 12 SP5 | kernel-azure +2 | 4.12.14-16.197.1 | SUSE-SU-2024:3252-1 |
| SLES for SAP 12 SP5 | kernel-syms +2 | 4.12.14-122.228.1 | SUSE-SU-2024:3251-1 |
| SLE Real Time 12 SP5 | kernel-rt +3 | 4.12.14-10.200.1 | SUSE-SU-2024:3189-1 |
| SLE Micro 5.5 | kernel-default | 5.14.21-150500.55.80.2 | SUSE-SU-2024:3483-1 |
| SLE Micro 5.5 | kernel-default-base | 5.14.21-150500.55.80.2.150500.6.35.6 | SUSE-SU-2024:3483-1 |
| SLE Micro 5.5 | kernel-rt +1 | 5.14.21-150500.13.67.3 | SUSE-SU-2024:3209-1 |
| SLE Live Patching 15 SP5 | kernel-default | 5.14.21-150500.55.80.2 | SUSE-SU-2024:3483-1 |
| SLE Live Patching 15 SP5 | kernel-livepatch-SLE15-SP5_Update_19 +1 | 1-150500.11.3.2 | SUSE-SU-2024:3483-1, SUSE-SU-2024:3209-1 |
| SLE Live Patching 12 SP5 | kernel-default | 4.12.14-122.228.1 | SUSE-SU-2024:3251-1 |
| SLE Live Patching 12 SP5 | kgraft-patch-SLE12-SP5_Update_60 | 1-8.3.1 | SUSE-SU-2024:3251-1 |
| SUSE Real Time Module 15 SP5 | kernel-rt +2 | 5.14.21-150500.13.67.3 | SUSE-SU-2024:3209-1 |
| SUSE Real Time Module 15 SP5 | kernel-syms-rt | 5.14.21-150500.13.67.1 | SUSE-SU-2024:3209-1 |
openSUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Leap 15.5 | dtb-aarch64 +3 | 5.14.21-150500.55.80.1 | SUSE-SU-2024:3483-1 |
| openSUSE Leap 15.5 | kernel-64kb +6 | 5.14.21-150500.55.80.2 | SUSE-SU-2024:3483-1 |
| openSUSE Leap 15.5 | kernel-azure +2 | 5.14.21-150500.33.66.1 | SUSE-SU-2024:3190-1 |
| openSUSE Leap 15.5 | kernel-default-base | 5.14.21-150500.55.80.2.150500.6.35.6 | SUSE-SU-2024:3483-1 |
| openSUSE Leap 15.5 | kernel-rt +2 | 5.14.21-150500.13.67.3 | SUSE-SU-2024:3209-1 |
| openSUSE Leap 15.5 | kernel-syms-rt | 5.14.21-150500.13.67.1 | SUSE-SU-2024:3209-1 |
Show 1 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Leap Micro 5.5 | kernel-default | 5.14.21-150500.55.80.2 | SUSE-SU-2024:3483-1 |
| openSUSE Leap Micro 5.5 | kernel-default-base | 5.14.21-150500.55.80.2.150500.6.35.6 | SUSE-SU-2024:3483-1 |
| openSUSE Leap Micro 5.5 | kernel-rt | 5.14.21-150500.13.67.3 | SUSE-SU-2024:3209-1 |
Advisories 7
- SUSE-SU-2024:3483-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3189-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3209-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3252-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3190-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3251-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- WID-SEC-2024-1898 Linux Kernel: Mehrere Schwachstellen ermöglichen Denial of Service BSI CERT-Bund (WID) · Aug 6, 2025