CVE-2026-74599
mm/ptdump: always stabilise against page table freeing using init_mm
Description
In the Linux kernel, the following vulnerability has been resolved: mm/ptdump: always stabilise against page table freeing using init_mm Previous commits have established the invariant that kernel page table freeing is performed while an mmap read lock on init_mm is held, which fixes races between ptdump and kernel page table freeing over init_mm. However, x86 and arm64 can perform a ptdump over an mm other than init_mm via ptdump_walk_pgd() and since kernel memory ranges are shared across non-kernel mm's, this means that the race still exists for these cases. Fix this by acquiring a nested mmap write lock for init_mm in ptdump_walk_pgd(). This is safe as we take this after mmap write locking the mm, and nothing acquires the init_mm lock first before locking an arbitrary mm, so no deadlock is possible. Also update walk_page_range_debug() to assert that init_mm is write locked, add a comment explaining why and remove some redundant code, and eliminate the unnecessary and confusing invocation of walk_kernel_page_table_range(). We can safely remove the non-NULL check for walk.mm, as the mmap lock asserts would NULL pointer deref if it was (and of course no callers do this). The first point at which ptdump can race kernel page table freeing is commit b6bdb7517c3d ("mm/vmalloc: add interfaces to free unmapped page table"), so we target this in the Fixes tag.
INFO
Published Date :
Aug. 22, 2026, 4:16 p.m.
Last Modified :
Aug. 22, 2026, 4:16 p.m.
Remotely Exploit :
No
Source :
416baaa9-dc9f-4396-8d5f-8c081fb06d67
Solution
- Acquire a nested mmap write lock for init_mm in ptdump_walk_pgd.
- Update walk_page_range_debug to assert init_mm write lock.
- Remove redundant code and confusing invocations.
- Remove the non-NULL check for walk.mm.
References to Advisories, Solutions, and Tools
Here, you will find a curated list of external links that provide in-depth
information, practical solutions, and valuable tools related to
CVE-2026-74599.
CWE - Common Weakness Enumeration
While CVE identifies
specific instances of vulnerabilities, CWE categorizes the common flaws or
weaknesses that can lead to vulnerabilities. CVE-2026-74599 is
associated with the following CWEs:
Common Attack Pattern Enumeration and Classification (CAPEC)
Common Attack Pattern Enumeration and Classification
(CAPEC)
stores attack patterns, which are descriptions of the common attributes and
approaches employed by adversaries to exploit the CVE-2026-74599
weaknesses.
We scan GitHub repositories to detect new proof-of-concept exploits. Following list is a collection of public exploits and proof-of-concepts, which have been published on GitHub (sorted by the most recently updated).
Results are limited to the first 15 repositories due to potential performance issues.
The following list is the news that have been mention
CVE-2026-74599 vulnerability anywhere in the article.
The following table lists the changes that have been made to the
CVE-2026-74599 vulnerability over time.
Vulnerability history details can be useful for understanding the evolution of a vulnerability, and for identifying the most recent changes that may impact the vulnerability's severity, exploitability, or other characteristics.
-
New CVE Received by 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Aug. 22, 2026
Action Type Old Value New Value Added Affected [{'repo': 'https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git', 'vendor': 'Linux', 'product': 'Linux', 'versions': [{'status': 'affected', 'version': 'b6bdb7517c3d3f41f20e5c2948d6bc3f8897394e', 'lessThan': '7f740664aec1f832953c2e6d9b8920cd6c8bcc0c', 'versionType': 'git'}, {'status': 'affected', 'version': 'b6bdb7517c3d3f41f20e5c2948d6bc3f8897394e', 'lessThan': '4adc4c9a9a43d61fe476dfe10811f3df2e7e4106', 'versionType': 'git'}, {'status': 'affected', 'version': 'b6bdb7517c3d3f41f20e5c2948d6bc3f8897394e', 'lessThan': '27c32e5538344b13c1505a08861e04620c125d47', 'versionType': 'git'}, {'status': 'affected', 'version': '31895cfd79564111cdd5a9f48c5d491ae26a238e', 'versionType': 'git'}, {'status': 'affected', 'version': '9c7f7bdb1932f8c1e5f80d32c717184701afe701', 'versionType': 'git'}, {'status': 'affected', 'version': 'acdb4981644c8e31ccee294bdefff475c0cf587b', 'versionType': 'git'}, {'status': 'affected', 'version': '0454e2fad9306961540ee7e84da47a8e345b7d22', 'versionType': 'git'}, {'status': 'affected', 'version': '4.4.125', 'lessThan': '4.5', 'versionType': 'semver'}, {'status': 'affected', 'version': '4.9.91', 'lessThan': '4.10', 'versionType': 'semver'}, {'status': 'affected', 'version': '4.14.31', 'lessThan': '4.15', 'versionType': 'semver'}, {'status': 'affected', 'version': '4.15.14', 'lessThan': '4.16', 'versionType': 'semver'}], 'programFiles': ['mm/pagewalk.c', 'mm/ptdump.c'], 'defaultStatus': 'unaffected'}, {'repo': 'https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git', 'vendor': 'Linux', 'product': 'Linux', 'versions': [{'status': 'affected', 'version': '4.16'}, {'status': 'unaffected', 'version': '0', 'lessThan': '4.16', 'versionType': 'semver'}, {'status': 'unaffected', 'version': '6.18.45', 'versionType': 'semver', 'lessThanOrEqual': '6.18.*'}, {'status': 'unaffected', 'version': '7.1.9', 'versionType': 'semver', 'lessThanOrEqual': '7.1.*'}, {'status': 'unaffected', 'version': '7.2', 'versionType': 'original_commit_for_fix', 'lessThanOrEqual': '*'}], 'programFiles': ['mm/pagewalk.c', 'mm/ptdump.c'], 'defaultStatus': 'affected'}] Added Description In the Linux kernel, the following vulnerability has been resolved: mm/ptdump: always stabilise against page table freeing using init_mm Previous commits have established the invariant that kernel page table freeing is performed while an mmap read lock on init_mm is held, which fixes races between ptdump and kernel page table freeing over init_mm. However, x86 and arm64 can perform a ptdump over an mm other than init_mm via ptdump_walk_pgd() and since kernel memory ranges are shared across non-kernel mm's, this means that the race still exists for these cases. Fix this by acquiring a nested mmap write lock for init_mm in ptdump_walk_pgd(). This is safe as we take this after mmap write locking the mm, and nothing acquires the init_mm lock first before locking an arbitrary mm, so no deadlock is possible. Also update walk_page_range_debug() to assert that init_mm is write locked, add a comment explaining why and remove some redundant code, and eliminate the unnecessary and confusing invocation of walk_kernel_page_table_range(). We can safely remove the non-NULL check for walk.mm, as the mmap lock asserts would NULL pointer deref if it was (and of course no callers do this). The first point at which ptdump can race kernel page table freeing is commit b6bdb7517c3d ("mm/vmalloc: add interfaces to free unmapped page table"), so we target this in the Fixes tag. Added Reference https://git.kernel.org/stable/c/27c32e5538344b13c1505a08861e04620c125d47 Added Reference https://git.kernel.org/stable/c/4adc4c9a9a43d61fe476dfe10811f3df2e7e4106 Added Reference https://git.kernel.org/stable/c/7f740664aec1f832953c2e6d9b8920cd6c8bcc0c