{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2024-42234","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2024-07-30T07:40:12.252Z","datePublished":"2024-08-07T15:14:24.467Z","dateUpdated":"2026-08-05T11:35:59.332Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T11:35:59.332Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nmm: fix crashes from deferred split racing folio migration\n\nEven on 6.10-rc6, I've been seeing elusive \"Bad page state\"s (often on\nflags when freeing, yet the flags shown are not bad: PG_locked had been\nset and cleared??), and VM_BUG_ON_PAGE(page_ref_count(page) == 0)s from\ndeferred_split_scan()'s folio_put(), and a variety of other BUG and WARN\nsymptoms implying double free by deferred split and large folio migration.\n\n6.7 commit 9bcef5973e31 (\"mm: memcg: fix split queue list crash when large\nfolio migration\") was right to fix the memcg-dependent locking broken in\n85ce2c517ade (\"memcontrol: only transfer the memcg data for migration\"),\nbut missed a subtlety of deferred_split_scan(): it moves folios to its own\nlocal list to work on them without split_queue_lock, during which time\nfolio->_deferred_list is not empty, but even the \"right\" lock does nothing\nto secure the folio and the list it is on.\n\nFortunately, deferred_split_scan() is careful to use folio_try_get(): so\nfolio_migrate_mapping() can avoid the race by folio_undo_large_rmappable()\nwhile the old folio's reference count is temporarily frozen to 0 - adding\nsuch a freeze in the !mapping case too (originally, folio lock and\nunmapping and no swap cache left an anon folio unreachable, so no freezing\nwas needed there: but the deferred split queue offers a way to reach it)."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The vulnerability is in core mm (THP deferred split queue vs. folio migration) and is reached entirely through local syscalls — mmap/madvise(MADV_HUGEPAGE)/munmap to queue folios, memory pressure to invoke the shrinker, and move_pages/mbind or direct compaction to migrate them. No network or physical access is involved.\nAC:L - The attacker controls both sides of the race and can create it deliberately: one thread loops partial-unmapping large anon folios onto the deferred split queue while others generate reclaim pressure and issue move_pages()/fault THPs to drive migration of those same folios. Retrying is free and unlimited, and no attacker-independent condition is required — the race was hit even accidentally under ordinary load.\nPR:L - Only an ordinary unprivileged local user is needed; move_pages() on the caller's own process requires just ptrace_may_access() on self and MPOL_MF_MOVE, not CAP_SYS_NICE, and THP allocation, partial unmap, and memory pressure need no capabilities at all.\nUI:N - The attacking process performs all steps itself with no victim action required; the shrinker and compaction/migration paths run autonomously in kernel context.\nS:U - The corruption is of kernel page/folio state within the same security authority as the exploited kernel; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - The double free / refcount underflow returns a page to the buddy allocator while it is still mapped into the attacker's address space, allowing that page to be reallocated as a kernel slab page, page table, or kernel stack and read directly from userspace, giving arbitrary kernel memory disclosure.\nI:H - The same cross-allocation aliasing gives an arbitrary kernel write primitive — the attacker retains a writable userspace mapping of a page the kernel has re-handed to internal structures — plus the list corruption itself writes attacker-influenced pointers into the global split queue, making control-flow hijack and privilege escalation feasible.\nA:H - The reported symptoms are outright kernel crashes — \"Bad page state\", VM_BUG_ON_PAGE(page_ref_count(page) == 0), list_del corruption BUGs and assorted WARNs from double free — any of which panics or destabilizes the system, and the condition can be triggered repeatedly."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["mm/memcontrol.c","mm/migrate.c"],"versions":[{"version":"9bcef5973e31020e5aa8571eb994d67b77318356","lessThan":"fc7facce686b64201dbf0b9614cc1d0bfad70010","status":"affected","versionType":"git"},{"version":"9bcef5973e31020e5aa8571eb994d67b77318356","lessThan":"be9581ea8c058d81154251cb0695987098996cad","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["mm/memcontrol.c","mm/migrate.c"],"versions":[{"version":"6.7","status":"affected"},{"version":"0","lessThan":"6.7","status":"unaffected","versionType":"semver"},{"version":"6.9.10","lessThanOrEqual":"6.9.*","status":"unaffected","versionType":"semver"},{"version":"6.10","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.7","versionEndExcluding":"6.9.10"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.7","versionEndExcluding":"6.10"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/fc7facce686b64201dbf0b9614cc1d0bfad70010"},{"url":"https://git.kernel.org/stable/c/be9581ea8c058d81154251cb0695987098996cad"}],"title":"mm: fix crashes from deferred split racing folio migration","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2024-42234","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2024-09-10T16:14:10.736603Z"}}}],"title":"CISA ADP Vulnrichment","providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2024-09-11T17:34:32.409Z"}}]}}