CVE-2025-40174 (GCVE-0-2025-40174)

Vulnerability from cvelistv5 – Published: 2025-11-12 10:53 – Updated: 2026-08-05 12:08
VLAI
Title
x86/mm: Fix SMP ordering in switch_mm_irqs_off()
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 ]
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: 209954cbc7d0ce1a190fc725d20ce303d74d2680 , < 0fe5e3f5fb75c5d88dad24dece3ee75e9d87adeb (git)
Affected: 209954cbc7d0ce1a190fc725d20ce303d74d2680 , < 83b0177a6c4889b3a6e865da5e21b2c9d97d0551 (git)
Create a notification for this product.
Linux Linux Affected: 6.14
Unaffected: 0 , < 6.14 (semver)
Unaffected: 6.17.5 , ≤ 6.17.* (semver)
Unaffected: 6.18 , ≤ * (original_commit_for_fix)
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",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2025-40174",
      "date": "2026-08-06",
      "epss": "0.0013",
      "percentile": "0.03028"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2025-40174\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-11-12T11:15:47.910\",\"lastModified\":\"2026-07-30T06:24:16.187\",\"vulnStatus\":\"Deferred\",\"cveTags\":[],\"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 ]\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"arch/x86/mm/tlb.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"209954cbc7d0ce1a190fc725d20ce303d74d2680\",\"lessThan\":\"0fe5e3f5fb75c5d88dad24dece3ee75e9d87adeb\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"209954cbc7d0ce1a190fc725d20ce303d74d2680\",\"lessThan\":\"83b0177a6c4889b3a6e865da5e21b2c9d97d0551\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"arch/x86/mm/tlb.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.14\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.14\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.17.5\",\"lessThanOrEqual\":\"6.17.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"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\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/0fe5e3f5fb75c5d88dad24dece3ee75e9d87adeb\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/83b0177a6c4889b3a6e865da5e21b2c9d97d0551\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-07-30T08:44:23+00:00",
      "cve": "CVE-2025-40174",
      "id": "CVE-2025-40174",
      "initial_release_date": "2025-11-12T00:00:00+00:00",
      "product_status:known_affected": "14",
      "product_status:known_not_affected": "260",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: x86/mm: Fix SMP ordering in switch_mm_irqs_off()",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2025/cve-2025-40174.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-07-31T01:03:04Z",
      "cve": "CVE-2025-40174",
      "id": "CVE-2025-40174",
      "initial_release_date": "2025-11-14T00:24:20Z",
      "product_status:known_not_affected": "408",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2025-40174",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2025-40174.json",
      "version": "6"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Loading…