migrate: correct lock ordering for hugetlb file folios
Syzbot has found a deadlock (analyzed by Lance Yang):
1) Task (5749): Holds folio_lock, then tries to acquire i_mmap_rwsem(read lock).
2) Task (5754): Holds i_mmap_rwsem(write lock), then tries to acquire
folio_lock.
migrate_pages()
-> migrate_hugetlbs()
-> unmap_and_move_huge_page() <- Takes folio_lock!
-> remove_migration_ptes()
-> __rmap_walk_file()
-> i_mmap_lock_read() <- Waits for i_mmap_rwsem(read lock)!
hugetlbfs_fallocate()
-> hugetlbfs_punch_hole() <- Takes i_mmap_rwsem(write lock)!
-> hugetlbfs_zero_partial_page()
-> filemap_lock_hugetlb_folio()
-> filemap_lock_folio()
-> __filemap_get_folio <- Waits for folio_lock!
The migration path is the one taking locks in the wrong order according to
the documentation at the top of mm/rmap.c. So expand the scope of the
existing i_mmap_lock to cover the calls to remove_migration_ptes() too.
This is (mostly) how it used to be after commit c0d0381ade79. That was
removed by 336bf30eb765 for both file & anon hugetlb pages when it should
only have been removed for anon hugetlb pages.
Analysis and contextual insights are available on OpenCVE Cloud.
No vendor fix or workaround currently provided.
Additional remediation guidance may be available on OpenCVE Cloud.
Tracking
Sign in to view the affected projects.
| Source | ID | Title |
|---|---|---|
Debian DLA |
DLA-4475-1 | linux security update |
Debian DLA |
DLA-4476-1 | linux-6.1 security update |
Debian DSA |
DSA-6126-1 | linux security update |
Debian DSA |
DSA-6127-1 | linux security update |
Ubuntu USN |
USN-8162-1 | Linux kernel (NVIDIA Tegra) vulnerabilities |
Ubuntu USN |
USN-8180-1 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-8180-2 | Linux kernel (FIPS) vulnerabilities |
Ubuntu USN |
USN-8186-1 | Linux kernel (Real-time) vulnerabilities |
Ubuntu USN |
USN-8187-1 | Linux kernel (NVIDIA) vulnerabilities |
Ubuntu USN |
USN-8188-1 | Linux kernel (HWE) vulnerabilities |
Ubuntu USN |
USN-8180-3 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-8180-4 | Linux kernel (Azure FIPS) vulnerabilities |
Ubuntu USN |
USN-8180-5 | Linux kernel (IBM) vulnerabilities |
Ubuntu USN |
USN-8243-1 | Linux kernel (Azure) vulnerabilities |
Ubuntu USN |
USN-8180-6 | Linux kernel (Raspberry Pi) vulnerabilities |
Ubuntu USN |
USN-8275-1 | Linux kernel (Xilinx ZynqMP) vulnerabilities |
Ubuntu USN |
USN-8278-1 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-8289-1 | Linux kernel (NVIDIA) vulnerabilities |
Wed, 18 Mar 2026 13:00:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| Weaknesses | NVD-CWE-noinfo | |
| CPEs | cpe:2.3:o:linux:linux_kernel:5.10:-:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:5.10:rc4:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:5.10:rc5:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:5.10:rc6:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:5.10:rc7:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:6.19:rc1:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:6.19:rc2:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:6.19:rc3:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:6.19:rc4:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:6.19:rc5:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:6.19:rc6:*:*:*:*:*:* |
|
| Metrics |
cvssV3_1
|
cvssV3_1
|
Fri, 06 Feb 2026 17:00:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| References |
|
Thu, 05 Feb 2026 00:15:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| References |
| |
| Metrics |
threat_severity
|
cvssV3_1
|
Wed, 04 Feb 2026 16:30:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| Description | In the Linux kernel, the following vulnerability has been resolved: migrate: correct lock ordering for hugetlb file folios Syzbot has found a deadlock (analyzed by Lance Yang): 1) Task (5749): Holds folio_lock, then tries to acquire i_mmap_rwsem(read lock). 2) Task (5754): Holds i_mmap_rwsem(write lock), then tries to acquire folio_lock. migrate_pages() -> migrate_hugetlbs() -> unmap_and_move_huge_page() <- Takes folio_lock! -> remove_migration_ptes() -> __rmap_walk_file() -> i_mmap_lock_read() <- Waits for i_mmap_rwsem(read lock)! hugetlbfs_fallocate() -> hugetlbfs_punch_hole() <- Takes i_mmap_rwsem(write lock)! -> hugetlbfs_zero_partial_page() -> filemap_lock_hugetlb_folio() -> filemap_lock_folio() -> __filemap_get_folio <- Waits for folio_lock! The migration path is the one taking locks in the wrong order according to the documentation at the top of mm/rmap.c. So expand the scope of the existing i_mmap_lock to cover the calls to remove_migration_ptes() too. This is (mostly) how it used to be after commit c0d0381ade79. That was removed by 336bf30eb765 for both file & anon hugetlb pages when it should only have been removed for anon hugetlb pages. | |
| Title | migrate: correct lock ordering for hugetlb file folios | |
| First Time appeared |
Linux
Linux linux Kernel |
|
| CPEs | cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | |
| Vendors & Products |
Linux
Linux linux Kernel |
|
| References |
|
Status: PUBLISHED
Assigner: Linux
Published:
Updated: 2026-05-11T21:59:56.711Z
Reserved: 2026-01-13T15:37:45.964Z
Link: CVE-2026-23097
No data.
Status : Analyzed
Published: 2026-02-04T17:16:20.570
Modified: 2026-03-18T12:47:17.880
Link: CVE-2026-23097
OpenCVE Enrichment
Updated: 2026-04-17T23:45:25Z
Debian DLA
Debian DSA
Ubuntu USN