In the Linux kernel, the following vulnerability has been resolved:
NFS: Fix nfs_netfs_issue_read() xarray locking for writeback interrupt
The loop inside nfs_netfs_issue_read() currently does not disable interrupts while iterating through pages in the xarray to submit for NFS read. This is not safe though since after taking xa_lock, another page in the mapping could be processed for writeback inside an interrupt, and deadlock can occur. The fix is simple and clean if we use xa_for_each_range(), which handles the iteration with RCU while reducing code complexity.
The problem is easily reproduced with the following test: mount -o vers=3,fsc 127.0.0.1:/export /mnt/nfs dd if=/dev/zero of=/mnt/nfs/file1.bin bs=4096 count=1 echo 3 > /proc/sys/vm/drop_caches dd if=/mnt/nfs/file1.bin of=/dev/null umount /mnt/nfs
On the console with a lockdep-enabled kernel a message similar to the following will be seen:
================================ WARNING: inconsistent lock state 6.7.0-lockdbg+ #10 Not tainted -------------------------------- inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage. test5/1708 [HC0[0]:SC0[0]:HE1:SE1] takes: ffff888127baa598 (&xa->xa_lock#4){+.?.}-{3:3}, at: nfs_netfs_issue_read+0x1b2/0x4b0 [nfs] {IN-SOFTIRQ-W} state was registered at: lock_acquire+0x144/0x380 _raw_spin_lock_irqsave+0x4e/0xa0 __folio_end_writeback+0x17e/0x5c0 folio_end_writeback+0x93/0x1b0 iomap_finish_ioend+0xeb/0x6a0 blk_update_request+0x204/0x7f0 blk_mq_end_request+0x30/0x1c0 blk_complete_reqs+0x7e/0xa0 __do_softirq+0x113/0x544 __irq_exit_rcu+0xfe/0x120 irq_exit_rcu+0xe/0x20 sysvec_call_function_single+0x6f/0x90 asm_sysvec_call_function_single+0x1a/0x20 pv_native_safe_halt+0xf/0x20 default_idle+0x9/0x20 default_idle_call+0x67/0xa0 do_idle+0x2b5/0x300 cpu_startup_entry+0x34/0x40 start_secondary+0x19d/0x1c0 secondary_startup_64_no_verify+0x18f/0x19b irq event stamp: 176891 hardirqs last enabled at (176891): [<ffffffffa67a0be4>] _raw_spin_unlock_irqrestore+0x44/0x60 hardirqs last disabled at (176890): [<ffffffffa67a0899>] _raw_spin_lock_irqsave+0x79/0xa0 softirqs last enabled at (176646): [<ffffffffa515d91e>] __irq_exit_rcu+0xfe/0x120 softirqs last disabled at (176633): [<ffffffffa515d91e>] __irq_exit_rcu+0xfe/0x120
other info that might help us debug this: Possible unsafe locking scenario:
CPU0 ---- lock(&xa->xa_lock#4); <Interrupt> lock(&xa->xa_lock#4);
*** DEADLOCK ***
2 locks held by test5/1708: #0: ffff888127baa498 (&sb->s_type->i_mutex_key#22){++++}-{4:4}, at: nfs_start_io_read+0x28/0x90 [nfs] #1: ffff888127baa650 (mapping.invalidate_lock#3){.+.+}-{4:4}, at: page_cache_ra_unbounded+0xa4/0x280
stack backtrace: CPU: 6 PID: 1708 Comm: test5 Kdump: loaded Not tainted 6.7.0-lockdbg+ Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-1.fc39 04/01/2014 Call Trace: dump_stack_lvl+0x5b/0x90 mark_lock+0xb3f/0xd20 __lock_acquire+0x77b/0x3360 _raw_spin_lock+0x34/0x80 nfs_netfs_issue_read+0x1b2/0x4b0 [nfs] netfs_begin_read+0x77f/0x980 [netfs] nfs_netfs_readahead+0x45/0x60 [nfs] nfs_readahead+0x323/0x5a0 [nfs] read_pages+0xf3/0x5c0 page_cache_ra_unbounded+0x1c8/0x280 filemap_get_pages+0x38c/0xae0 filemap_read+0x206/0x5e0 nfs_file_read+0xb7/0x140 [nfs] vfs_read+0x2a9/0x460 ksys_read+0xb7/0x140
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linux | Jul 27, 2026 | Jul 27, 2026 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | May 1, 2024 |
| Suse | — | Upgrade dtb-qcomUpgrade dtb-xilinxUpgrade dtb-sprdUpgrade kselftests-kmp-64kbUpgrade ocfs2-kmp-azureUpgrade dlm-kmp-64kbUpgrade dtb-armUpgrade kernel-syms-azureUpgrade ocfs2-kmp-defaultUpgrade cluster-md-kmp-rtUpgrade dtb-apmUpgrade dtb-exynosUpgrade kernel-obs-buildUpgrade dtb-allwinnerUpgrade kernel-kvmsmallUpgrade kernel-azure-livepatch-develUpgrade dtb-mediatekUpgrade dtb-caviumUpgrade dtb-rockchipUpgrade kernel-rtUpgrade dtb-nvidiaUpgrade kernel-default-base-rebuildUpgrade kernel-64kb-develUpgrade kernel-sourceUpgrade dtb-alteraUpgrade gfs2-kmp-azureUpgrade kernel-rt-extraUpgrade kernel-default-vdsoUpgrade kernel-rt-develUpgrade gfs2-kmp-rtUpgrade kernel-devel-rtUpgrade reiserfs-kmp-azureUpgrade kernel-devel-azureUpgrade kernel-azure-optionalUpgrade kernel-azure-develUpgrade kernel-default-optionalUpgrade cluster-md-kmp-64kbUpgrade kernel-develUpgrade kernel-source-rtUpgrade dtb-lgUpgrade kernel-rt-vdsoUpgrade dtb-freescaleUpgrade dtb-amazonUpgrade kernel-64kb-livepatch-develUpgrade kernel-64kb-extraUpgrade dtb-appleUpgrade ocfs2-kmp-64kbUpgrade kernel-macrosUpgrade kernel-docsUpgrade kernel-rt_debug-livepatch-develUpgrade gfs2-kmp-defaultUpgrade kernel-debug-livepatch-develUpgrade kernel-default-extraUpgrade kernel-rt_debug-develUpgrade kernel-rt-livepatch-develUpgrade reiserfs-kmp-defaultUpgrade cluster-md-kmp-defaultUpgrade kernel-kvmsmall-livepatch-develUpgrade reiserfs-kmp-rtUpgrade kernel-64kb-optionalUpgrade kernel-default-livepatch-develUpgrade kernel-rt-optionalUpgrade kselftests-kmp-rtUpgrade kernel-symsUpgrade dlm-kmp-rtUpgrade dlm-kmp-azureUpgrade kernel-syms-rtUpgrade kernel-docs-htmlUpgrade kernel-debug-vdsoUpgrade kernel-azure-vdsoUpgrade dtb-amlogicUpgrade kernel-source-azureUpgrade kernel-azure-extraUpgrade dtb-renesasUpgrade kernel-rt_debugUpgrade kernel-source-vanillaUpgrade cluster-md-kmp-azureUpgrade reiserfs-kmp-64kbUpgrade kernel-obs-qaUpgrade kernel-default-develUpgrade kernel-64kbUpgrade dtb-socionextUpgrade kernel-kvmsmall-develUpgrade gfs2-kmp-64kbUpgrade kernel-defaultUpgrade kernel-default-baseUpgrade kernel-rt_debug-vdsoUpgrade kernel-default-livepatchUpgrade kernel-azureUpgrade dtb-hisiliconUpgrade kernel-debug-develUpgrade dtb-marvellUpgrade dtb-broadcomUpgrade kselftests-kmp-azureUpgrade dtb-amdUpgrade ocfs2-kmp-rtUpgrade kernel-zfcpdumpUpgrade kernel-kvmsmall-vdsoUpgrade kernel-debugUpgrade dlm-kmp-defaultUpgrade kselftests-kmp-default | Jun 24, 2024 | May 1, 2024 |
| Ubuntu | — | Upgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-ibm-classicUpgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-azure-fdeUpgrade linux-image-ibmUpgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-kvmUpgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-awsUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-raspiUpgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-azureUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-oem-24.04aUpgrade linux-image-lowlatency-64kUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-oem-24.04Upgrade linux-image-gkeUpgrade linux-image-6.8.0-1009-awsUpgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-oracleUpgrade linux-image-virtualUpgrade linux-image-6.8.0-1008-azureUpgrade linux-image-gcpUpgrade linux-image-6.8.0-1006-oemUpgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-genericUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-6.8.0-35-lowlatency-64kUpgrade linux-image-oracle-64kUpgrade linux-image-generic-64kUpgrade linux-image-generic-lpae | Jul 1, 2024 | May 1, 2024 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub