CVE-2025-40174 (GCVE-0-2025-40174)
Vulnerability from cvelistv5
Published
2025-11-12 10:53
Modified
2026-08-05 12:08
Summary
In the Linux kernel, the following vulnerability has been resolved: x86/mm: Fix SMP ordering in switch_mm_irqs_off() Stephen noted that it is possible to not have an smp_mb() between the loaded_mm store and the tlb_gen load in switch_mm(), meaning the ordering against flush_tlb_mm_range() goes out the window, and it becomes possible for switch_mm() to not observe a recent tlb_gen update and fail to flush the TLBs. [ dhansen: merge conflict fixed by Ingo ]
Impacted products
Vendor Product Version
Linux Linux Version: 209954cbc7d0ce1a190fc725d20ce303d74d2680
Version: 209954cbc7d0ce1a190fc725d20ce303d74d2680
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "arch/x86/mm/tlb.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "0fe5e3f5fb75c5d88dad24dece3ee75e9d87adeb",
              "status": "affected",
              "version": "209954cbc7d0ce1a190fc725d20ce303d74d2680",
              "versionType": "git"
            },
            {
              "lessThan": "83b0177a6c4889b3a6e865da5e21b2c9d97d0551",
              "status": "affected",
              "version": "209954cbc7d0ce1a190fc725d20ce303d74d2680",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/x86/mm/tlb.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.14"
            },
            {
              "lessThan": "6.14",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.17.*",
              "status": "unaffected",
              "version": "6.17.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.18",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.17.5",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "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": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - Triggering the missed TLB flush requires executing code on the target machine \u2014 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 \u2014 creating threads, setting CPU affinity, and calling munmap/mprotect/madvise require no capabilities, no namespaces, and no special configuration.\nUI:N - The attacker\u0027s 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\u0027s 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 \u2014 another process\u0027s or container\u0027s anonymous memory, page cache file contents, or kernel slab data \u2014 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 \u2014 page tables, slab objects, and page cache \u2014 leads to oopses and kernel panics, and the resulting memory corruption is trivially escalated into a full system crash."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:08:19.978Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "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"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-40174",
    "datePublished": "2025-11-12T10:53:49.859Z",
    "dateReserved": "2025-04-16T07:20:57.177Z",
    "dateUpdated": "2026-08-05T12:08:19.978Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…