CVE-2024-57884: mm: vmscan: account for free pages to prevent infinite Loop in throttle_direct_reclaim()
Noroxi assessment
Priority: Monitor (action score 22/100)
- The sources we track (CISA KEV, Exploit-DB, Metasploit, Nuclei, GitHub) show no public exploit code or exploitation in the wild.
- Probability of exploitation in the next 30 days: 0.21% (FIRST EPSS).
- Someone with local access to the system can trigger it. A low-privileged account is enough. No user action is required. No special conditions are required; it is repeatable.
- Fixed version: Linux Linux 1ff2302e8aeac7f2eedb551d7a89617283b5c6b2, 58d0d02dbc67438fc80223fdd7bbc49cf0733284, 63eac98d6f0898229f515cb62fe4e4db2430e99c.
Low priority for now. Upgrade to Linux Linux 1ff2302e8aeac7f2eedb551d7a89617283b5c6b2, 58d0d02dbc67438fc80223fdd7bbc49cf0733284, 63eac98d6f0898229f515cb62fe4e4db2430e99c or later.
Generated automatically from the record's data: CVSS (NVD and CNA), CISA KEV and SSVC, FIRST EPSS, exploit sources, fixed versions. How we calculate it
Primary sources: NVD · CVE.org · FIRST EPSS
In the Linux kernel, the following vulnerability has been resolved: mm: vmscan: account for free pages to prevent infinite Loop in throttle_direct_reclaim() The task sometimes continues looping in throttle_direct_reclaim() because allow_direct_reclaim(pgdat) keeps returning false. #0 [ffff80002cb6f8d0] __switch_to at ffff8000080095ac #1 [ffff80002cb6f900] __schedule at ffff800008abbd1c #2 [ffff80002cb6f990] schedule at ffff800008abc50c #3 [ffff80002cb6f9b0] throttle_direct_reclaim at ffff800008273550 #4 [ffff80002cb6fa20] try_to_free_pages at ffff800008277b68 #5 [ffff80002cb6fae0] __alloc_pages_nodemask at ffff8000082c4660 #6 [ffff80002cb6fc50] alloc_pages_vma at ffff8000082e4a98 #7 [ffff80002cb6fca0] do_anonymous_page at ffff80000829f5a8 #8 [ffff80002cb6fce0] __handle_mm_fault at ffff8000082a5974 #9 [ffff80002cb6fd90] handle_mm_fault at ffff8000082a5bd4 At this point, the pgdat contains the following two zones: NODE: 4 ZONE: 0 ADDR: ffff00817fffe540 NAME: "DMA32" SIZE: 20480 MIN/LOW/HIGH: 11/28/45 VM_STAT: NR_FREE_PAGES: 359 NR_ZONE_INACTIVE_ANON: 18813 NR_ZONE_ACTIVE_ANON: 0 NR_ZONE_INACTIVE_FILE: 50 NR_ZONE_ACTIVE_FILE: 0 NR_ZONE_UNEVICTABLE: 0 NR_ZONE_WRITE_PENDING: 0 NR_MLOCK: 0 NR_BOUNCE: 0 NR_ZSPAGES: 0 NR_FREE_CMA_PAGES: 0 NODE: 4 ZONE: 1 ADDR: ffff00817fffec00 NAME: "Normal" SIZE: 8454144 PRESENT: 98304 MIN/LOW/HIGH: 68/166/264 VM_STAT: NR_FREE_PAGES: 146 NR_ZONE_INACTIVE_ANON: 94668 NR_ZONE_ACTIVE_ANON: 3 NR_ZONE_INACTIVE_FILE: 735 NR_ZONE_ACTIVE_FILE: 78 NR_ZONE_UNEVICTABLE: 0 NR_ZONE_WRITE_PENDING: 0 NR_MLOCK: 0 NR_BOUNCE: 0 NR_ZSPAGES: 0 NR_FREE_CMA_PAGES: 0 In allow_direct_reclaim(), while processing ZONE_DMA32, the sum of inactive/active file-backed pages calculated in zone_reclaimable_pages() based on the result of zone_page_state_snapshot() is zero. Additionally, since this system lacks swap, the calculation of inactive/ active anonymous pages is skipped. crash> p nr_swap_pages nr_swap_pages = $1937 = { counter = 0 } As a result, ZONE_DMA32 is deemed unreclaimable and skipped, moving on to the processing of the next zone, ZONE_NORMAL, despite ZONE_DMA32 having free pages significantly exceeding the high watermark. The problem is that the pgdat->kswapd_failures hasn't been incremented. crash> px ((struct pglist_data *) 0xffff00817fffe540)->kswapd_failures $1935 = 0x0 This is because the node deemed balanced. The node balancing logic in balance_pgdat() evaluates all zones collectively. If one or more zones (e.g., ZONE_DMA32) have enough free pages to meet their watermarks, the entire node is deemed balanced. This causes balance_pgdat() to exit early before incrementing the kswapd_failures, as it considers the overall memory state acceptable, even though some zones (like ZONE_NORMAL) remain under significant pressure. The patch ensures that zone_reclaimable_pages() includes free pages (NR_FREE_PAGES) in its calculation when no other reclaimable pages are available (e.g., file-backed or anonymous pages). This change prevents zones like ZONE_DMA32, which have sufficient free pages, from being mistakenly deemed unreclaimable. By doing so, the patch ensures proper node balancing, avoids masking pressure on other zones like ZONE_NORMAL, and prevents infinite loops in throttle_direct_reclaim() caused by allow_direct_reclaim(pgdat) repeatedly returning false. The kernel hangs due to a task stuck in throttle_direct_reclaim(), caused by a node being incorrectly deemed balanced despite pressure in certain zones, such as ZONE_NORMAL. This issue arises from zone_reclaimable_pages ---truncated---
- Published
- Jan 15, 2025
- Updated
- Oct 15, 2026
- EPSS
- 0.2% · 12th percentile
- CWE
- CWE-835
Report tools
Action score
22
Low priority for now.
- CVSS
- 22 / 40 · 5.5 / 10
- CISA KEV
- 0 / 30 · Not listed
- EPSS
- 0 / 30 · 0.2%
Get told when this record changes
- Not in KEV: no record of exploitation in the wild
- No public exploit code on record
- A fix has been released
If any of these changes, we'll tell you in the daily email digest.
Is your version affected? Check itNoroxi analysis
What does it mean in your environment?
The assessment above is generated automatically from the record's data; it doesn't know your environment. Our team verifies on your systems whether this vulnerability is actually exploitable and which mitigation is enough.
We use this product, ask for helpAffected systems
Is your version affected?
Pick the product and type the version you run. It's compared with this record's version ranges in your browser; the version isn't sent anywhere.
| Vendor | Product | CPE |
|---|---|---|
| linux | linux kernel | cpe:2.3:o:linux:linux_kernel |
Versions reported by the vendor
Affected version ranges reported by the assigning authority (Linux). Independent of NVD's CPE analysis and usually ahead of it.
Linux Linux
- 4.8affected
- 5a1c84b404a7176b8b36e2a0041b6f0adb3151a3 and later · before 66cd37660ec34ec444fe42f2277330ae4a36bb19affected · git
- 5a1c84b404a7176b8b36e2a0041b6f0adb3151a3 and later · before d675fefbaec3815b3ae0af1bebd97f27df3a05c8affected · git
- 5a1c84b404a7176b8b36e2a0041b6f0adb3151a3 and later · before 63eac98d6f0898229f515cb62fe4e4db2430e99caffected · git
- 5a1c84b404a7176b8b36e2a0041b6f0adb3151a3 and later · before bfb701192129803191c9cd6cdd1f82cd07f8de2caffected · git
- 5a1c84b404a7176b8b36e2a0041b6f0adb3151a3 and later · before 1ff2302e8aeac7f2eedb551d7a89617283b5c6b2affected · git
- 5a1c84b404a7176b8b36e2a0041b6f0adb3151a3 and later · before 58d0d02dbc67438fc80223fdd7bbc49cf0733284affected · git
- 5a1c84b404a7176b8b36e2a0041b6f0adb3151a3 and later · before 6aaced5abd32e2a57cd94fd64f824514d0361da8affected · git
- before 4.8not affected · semver
- 5.4.289 and later · up to and including 5.4.*not affected · semver
Affected versions · NVD (7)
NVD version ranges (for catalog products). Add the product to your stack with a version and matching uses these.
- linux linux kernel4.8 and later · before 5.4.289
- linux linux kernel5.5 and later · before 5.10.233
- linux linux kernel5.11 and later · before 5.15.176
- linux linux kernel5.16 and later · before 6.1.124
- linux linux kernel6.2 and later · before 6.6.70
- linux linux kernel6.7 and later · before 6.12.9
- linux linux kernel6.13
Package-level exposure
OSV and GitHub Advisory data: ecosystem, package and range. SBOM matching uses this table.
| Ecosystem | Package | Affected range | Fix |
|---|---|---|---|
| Debian:12 | linux | before 6.1.124-1 | 6.1.124-1 |
| Debian:13 | linux | before 6.12.9-1 | 6.12.9-1 |
Same product
linux: all recordsOther highest-scoring records for the same primary product.
- CVE-2026-31431crypto: algif_aead - Revert to operating out-of-placeKEV90Now
- CVE-2022-0847A flaw was found in the way the "flags" member of the new pipe buffer structure was lacking proper initialization in copy_page_to_iter_pipe…KEV89Now
- CVE-2021-22555Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACEKEV85Now
Published before and after this one in the same product
- ← EarlierCVE-2024-57857Jan 15, 2025 · RDMA/siw: Remove direct link to net_device31Monitor
- ← EarlierCVE-2024-57883Jan 15, 2025 · mm: hugetlb: independent PMD page table shared count22Monitor
- Later →CVE-2024-57888Jan 15, 2025 · workqueue: Do not warn when cancelling WQ_MEM_RECLAIM work from !WQ_MEM_RECLAIM worker22Monitor
Remediation
Which version to upgrade to
Fix versions compiled from the vendor, package registries and Microsoft. Verify the vendor's note before upgrading.
| Product / package | Fixed version | Source |
|---|---|---|
| Linux Linux | 1ff2302e8aeac7f2eedb551d7a89617283b5c6b2 | Vendor (CNA) |
| Linux Linux | 58d0d02dbc67438fc80223fdd7bbc49cf0733284 | Vendor (CNA) |
| Linux Linux | 63eac98d6f0898229f515cb62fe4e4db2430e99c | Vendor (CNA) |
| Linux Linux | 66cd37660ec34ec444fe42f2277330ae4a36bb19 | Vendor (CNA) |
| Linux Linux | 6aaced5abd32e2a57cd94fd64f824514d0361da8 | Vendor (CNA) |
| Linux Linux | bfb701192129803191c9cd6cdd1f82cd07f8de2c | Vendor (CNA) |
| Linux Linux | d675fefbaec3815b3ae0af1bebd97f27df3a05c8 | Vendor (CNA) |
| debian:linux | 6.1.124-1 · Debian:12 | Package registry (OSV) |
Exploit status
No known public exploit
No public exploit has been observed yet. That doesn't mean you're safe, only that the bar is a little higher.
Research context
For pentesters and researchers: attack profile, score disagreement, timeline, patch commits, credits, variant and chain candidates, bug bounty scope. All derived from existing data; no exploit code.
Timeline
From publication to today: proof of concept, Metasploit module, CISA KEV and fix record. Dates are as reported by the sources.
No dated events beyond publication.
Variant candidates
Same product, same weakness class, within 18 months. If the patch missed the root cause, the sibling bug is here.
- CVE-2026-31448462 days apartext4: avoid infinite loops caused by residual data37Monitor
- CVE-2026-52933525 days apartio_uring/poll: fix signed comparison in io_poll_get_ownership()31Monitor
- CVE-2026-23451443 days apartbonding: prevent potential infinite loop in bond_header_parse()30Monitor
- CVE-2026-31552464 days apartwifi: wlcore: Return -ENOMEM instead of -EAGAIN if there is not enough headroom30Monitor
- CVE-2026-46052497 days apartceph: only d_add() negative dentries when they are unhashed30Monitor
- CVE-2024-27032259 days apartf2fs: fix to avoid potential panic during recovery25Monitor
Not on record for this CVE: EPSS history · patch commit or PR link · researcher credit · public bounty program.
Technical details
Attack conditions
- Someone with local access to the system can trigger it.
- A low-privileged account is enough.
- No user action is required.
- No special conditions are required; it is repeatable.
If successful
- Confidentiality
- none
- Integrity
- none
- Availability
- high · the service can be disrupted
- Attack vector
- Local
- Attack complexity
- Low
- Privileges required
- Low
- User interaction
- None
- Scope
- Unchanged
- Confidentiality impact
- None
- Integrity impact
- None
- Availability impact
- High
Weakness class (CWE)
CWE-835 · Loop with Unreachable Exit Condition ('Infinite Loop')CVSS vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
nvd-primary
Attack context
MITRE CAPEC attack patterns and ATT&CK techniques for this weakness class (CWE). A starting point for detection rules and threat hunting.
MITRE has no CAPEC/ATT&CK mapping for this CWE.
Change log (1)
- Fix✗ → ✓
For records you follow, these changes also arrive as notifications. →
References
Show all references (9 more)Show less
- git.kernel.org/stable/c/58d0d02dbc67438fc80223fdd7bbc49cf0733284
- git.kernel.org/stable/c/63eac98d6f0898229f515cb62fe4e4db2430e99c
- git.kernel.org/stable/c/66cd37660ec34ec444fe42f2277330ae4a36bb19
- git.kernel.org/stable/c/6aaced5abd32e2a57cd94fd64f824514d0361da8
- git.kernel.org/stable/c/bfb701192129803191c9cd6cdd1f82cd07f8de2c
- git.kernel.org/stable/c/d675fefbaec3815b3ae0af1bebd97f27df3a05c8
- lists.debian.org/debian-lts-announce/2025/03/msg00001.html
- lists.debian.org/debian-lts-announce/2025/03/msg00002.html
- cert-portal.siemens.com/productcert/html/ssa-398330.html
Vendor advisories and official records. Exploit/PoC links are deliberately left out.