{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-40174", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T07:20:57.177Z", "datePublished": "2025-11-12T10:53:49.859Z", "dateUpdated": "2026-08-05T12:08:19.978Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T12:08:19.978Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nx86/mm: Fix SMP ordering in switch_mm_irqs_off()\n\nStephen noted that it is possible to not have an smp_mb() between\nthe loaded_mm store and the tlb_gen load in switch_mm(), meaning the\nordering against flush_tlb_mm_range() goes out the window, and it\nbecomes possible for switch_mm() to not observe a recent tlb_gen\nupdate and fail to flush the TLBs.\n\n[ dhansen: merge conflict fixed by Ingo ]" } ], "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 - Triggering the missed TLB flush requires executing code on the target machine — a multithreaded process issuing munmap/mprotect/madvise on one CPU while another thread is context-switched into the same mm on a second CPU. There is no remote or adjacent-network path to `switch_mm_irqs_off()`.\nAC:L - The attacker controls both sides of the race entirely: thread placement via sched_setaffinity, the TLB-flush side via munmap/madvise loops, the context-switch side via yield/futex churn, and even the precondition (CPU bit already set in mm_cpumask so the barrier-providing cpumask_set_cpu is skipped), and can repeat it millions of times per second across all cores. Per attacker-controlled-race guidance this is Low; the bug is also known to fire on real production workloads.\nPR:L - Only an ordinary unprivileged local user account is needed — creating threads, setting CPU affinity, and calling munmap/mprotect/madvise require no capabilities, no namespaces, and no special configuration.\nUI:N - The attacker's own process performs every step; no victim action, mount, or file open is required.\nS:U - The vulnerable component and the impacted resources are both managed by the kernel's own security authority; this is standard kernel memory-corruption/privilege-escalation territory rather than a VM, IOMMU, or hypervisor boundary crossing.\nC:H - Stale TLB entries survive for pages that were unmapped and returned to the page allocator, letting the attacker read whatever those physical pages are reallocated to — another process's or container's anonymous memory, page cache file contents, or kernel slab data — amounting to effectively arbitrary memory disclosure.\nI:H - The retained entries are writable, so the attacker can write into reallocated physical pages, including reused page tables (yielding an arbitrary physical write primitive and root), and can also defeat mprotect(PROT_READ) and copy-on-write break, writing through to pages it should no longer own.\nA:H - Silent corruption of reallocated kernel memory — page tables, slab objects, and page cache — leads to oopses and kernel panics, and the resulting memory corruption is trivially escalated into a full system crash." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "arch/x86/mm/tlb.c" ], "versions": [ { "version": "209954cbc7d0ce1a190fc725d20ce303d74d2680", "lessThan": "0fe5e3f5fb75c5d88dad24dece3ee75e9d87adeb", "status": "affected", "versionType": "git" }, { "version": "209954cbc7d0ce1a190fc725d20ce303d74d2680", "lessThan": "83b0177a6c4889b3a6e865da5e21b2c9d97d0551", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "arch/x86/mm/tlb.c" ], "versions": [ { "version": "6.14", "status": "affected" }, { "version": "0", "lessThan": "6.14", "status": "unaffected", "versionType": "semver" }, { "version": "6.17.5", "lessThanOrEqual": "6.17.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.18", "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.14", "versionEndExcluding": "6.17.5" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.14", "versionEndExcluding": "6.18" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/0fe5e3f5fb75c5d88dad24dece3ee75e9d87adeb" }, { "url": "https://git.kernel.org/stable/c/83b0177a6c4889b3a6e865da5e21b2c9d97d0551" } ], "title": "x86/mm: Fix SMP ordering in switch_mm_irqs_off()", "x_generator": { "engine": "bippy-1.2.0" } } } }