CVE-2024-50229: nilfs2: fix potential deadlock with newly created symlinks
In the Linux kernel, the following vulnerability has been resolved:
nilfs2: fix potential deadlock with newly created symlinks
Syzbot reported that pagesymlink(), called by nilfssymlink(), triggers memory reclamation involving the filesystem layer, which can result in circular lock dependencies among the reader/writer semaphore nilfs->nssegctorsem, swriters percpurwsem (intwrite) and the fsreclaim pseudo lock.
This is because after commit 21fc61c73c39 ("don't put symlink bodies in pagecache into highmem"), the gfp flags of the page cache for symbolic links are overwritten to GFPKERNEL via inodenohighmem().
This is not a problem for symlinks read from the backing device, because the GFPFS flag is dropped after inodenohighmem() is called. However, when a new symlink is created with nilfssymlink(), the gfp flags remain overwritten to GFPKERNEL. Then, memory allocation called from pagesymlink() etc. triggers memory reclamation including the FS layer, which may call nilfsevictinode() or nilfsdirtyinode(). And these can cause a deadlock if they are called while nilfs->nssegctorsem is held:
Fix this issue by dropping the GFPFS flag from the page cache GFP flags of newly created symlinks in the same way that nilfsnewinode() and nilfsreadinode() do, as a workaround until we adopt nofs allocation scope consistently or improve the locking constraints.
Other sources
This CVE was automatically created from a reference found in an email or other text. If you are reading this, then this CVE entry is probably erroneous, since this text should be replaced by the official CVE description automatically.
— Launchpad
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 5.10.234-1Fixed in 6.1.129-1Fixed in 6.1.135-1Fixed in 6.12.25-1Fixed in 6.12.27-1 - Upgrade
Upgrade
debian/linux-6.1to a version that resolves this vulnerability.Fixed in 6.1.129-1~deb11u1 - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in 5.15.173.1-1 - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in 6.6.64.2-1 - Configuration
Fix potential deadlock by ensuring the page cache GFP flags used for newly created symlink bodies (via nilfs_symlink() -> page_symlink()) have the __GFP_FS flag dropped, matching the workaround behavior used by nilfs_new_inode() and __nilfs_read_inode() until locking constraints/allocation scope are improved.
Linux kernel (nilfs2) page cache GFP flags for newly created symlinks in nilfs_symlink()/page_symlink() = drop __GFP_FS from the page cache GFP flags (i.e., same behavior as nilfs_new_inode() and __nilfs_read_inode()) - Compensating control
If newly created symlinks are being created/handled on NILFS2 under workload that can trigger memory reclamation while nilfs->ns_segctor_sem is held, reduce/avoid symlink creation during that critical filesystem locking context (work around the circular lock dependency involving nilfs->ns_segctor_sem, s_writers percpu_rwsem (intwrite), and fs_reclaim) until the GFP-flag workaround is applied.
Event History
Frequently Asked Questions
What is the severity of CVE-2024-50229?
CVE-2024-50229 has a severity rating that may lead to potential deadlocks in systems using the Linux kernel.
How do I fix CVE-2024-50229?
To fix CVE-2024-50229, you should update your Linux kernel to a version where this vulnerability has been resolved.
What versions of Linux kernel are affected by CVE-2024-50229?
CVE-2024-50229 affects multiple versions of the Linux kernel ranging from 4.4.116 to 6.12-rc5.
What is the impact of CVE-2024-50229 on my system?
The impact of CVE-2024-50229 may include the potential for deadlocks during symlink operations in the nilfs2 filesystem.
Who reported the CVE-2024-50229 vulnerability?
The CVE-2024-50229 vulnerability was reported by Syzbot.