CVE-2026-93237 (GCVE-0-2026-93237)

Vulnerability from cvelistv5 – Published: 2026-09-24 15:33 – Updated: 2026-09-25 12:42
VLAI
Title
LoongArch: Add DIRECT_MAP_PHYSMEM_END definition
Summary
In the Linux kernel, the following vulnerability has been resolved: LoongArch: Add DIRECT_MAP_PHYSMEM_END definition get_free_mem_region() and mhp_get_pluggable_range() bound their search to DIRECT_MAP_PHYSMEM_END. LoongArch does not define it, so the fallback in include/linux/mm.h applies: under CONFIG_SPARSEMEM_VMEMMAP it is (1ULL << MAX_PHYSMEM_BITS) - 1, a compile-time constant that does not adapt to the CPU's physical address space bits (cpu_pabits, probed from CPUCFG1). The vmemmap window only covers physical space below 2^(cpu_pabits+1) (i.e. VMEMMAP_SIZE), so on CPUs with fewer physical address bits than MAX_PHYSMEM_BITS the fallback allows get_free_mem_region() to return a ZONE_DEVICE region outside the vmemmap window; vmemmap_populate() then wraps the memmap range around and maps it into low memory, silently corrupting the page tables. The same search also picked the top-of- address-space region that crashed memmap_init_zone_device() with amdkfd on Loongson-3C6000 in 6.16 [1]; the commit 2969b42c8f99 ("LoongArch/mm: align vmemmap to maximal folio size") keeps that region in bounds on current Loongson-3C6000 configs, but CPUs with smaller cpu_pabits (e.g. the Loongson-2K series) are still affected. Define DIRECT_MAP_PHYSMEM_END as the vmemmap-covered physical range, (1ULL << (cpu_pabits + 1)) - 1, capped at (1ULL << MAX_PHYSMEM_BITS) - 1 under CONFIG_SPARSEMEM, similar to the commit f3336b48cf9d ("riscv: mm: Define DIRECT_MAP_PHYSMEM_END"). [1] https://lore.kernel.org/amd-gfx/20250814032153.227285-1-jeffbai@aosc.io/
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 7b09f5af01ede480cbe7abcb281cf17550a46ff5 , < ab275a23b4d9f04ca6c2f5f6a3246194e045a761 (git)
Affected: 7b09f5af01ede480cbe7abcb281cf17550a46ff5 , < 55e18311c705cceef6c34d522ea387b1f0069bab (git)
Affected: 7b09f5af01ede480cbe7abcb281cf17550a46ff5 , < 2677f97a67fdbc62a82ce1faa67791f54451d36f (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.2
Unaffected: 0 , < 6.2 (semver)
Unaffected: 6.18.51 , ≤ 6.18.* (semver)
Unaffected: 7.2.5 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "arch/loongarch/include/asm/pgtable.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "ab275a23b4d9f04ca6c2f5f6a3246194e045a761",
              "status": "affected",
              "version": "7b09f5af01ede480cbe7abcb281cf17550a46ff5",
              "versionType": "git"
            },
            {
              "lessThan": "55e18311c705cceef6c34d522ea387b1f0069bab",
              "status": "affected",
              "version": "7b09f5af01ede480cbe7abcb281cf17550a46ff5",
              "versionType": "git"
            },
            {
              "lessThan": "2677f97a67fdbc62a82ce1faa67791f54451d36f",
              "status": "affected",
              "version": "7b09f5af01ede480cbe7abcb281cf17550a46ff5",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/loongarch/include/asm/pgtable.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.2"
            },
            {
              "lessThan": "6.2",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.51",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.51",
                  "versionStartIncluding": "6.2",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "versionStartIncluding": "6.2",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "6.2",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nLoongArch: Add DIRECT_MAP_PHYSMEM_END definition\n\nget_free_mem_region() and mhp_get_pluggable_range() bound their search\nto DIRECT_MAP_PHYSMEM_END. LoongArch does not define it, so the fallback\nin include/linux/mm.h applies: under CONFIG_SPARSEMEM_VMEMMAP it is\n(1ULL \u003c\u003c MAX_PHYSMEM_BITS) - 1, a compile-time constant that does not\nadapt to the CPU\u0027s physical address space bits (cpu_pabits, probed from\nCPUCFG1).\n\nThe vmemmap window only covers physical space below 2^(cpu_pabits+1)\n(i.e. VMEMMAP_SIZE), so on CPUs with fewer physical address bits than\nMAX_PHYSMEM_BITS the fallback allows get_free_mem_region() to return\na ZONE_DEVICE region outside the vmemmap window; vmemmap_populate() then\nwraps the memmap range around and maps it into low memory, silently\ncorrupting the page tables. The same search also picked the top-of-\naddress-space region that crashed memmap_init_zone_device() with amdkfd\non Loongson-3C6000 in 6.16 [1]; the commit 2969b42c8f99 (\"LoongArch/mm:\nalign vmemmap to maximal folio size\") keeps that region in bounds on\ncurrent Loongson-3C6000 configs, but CPUs with smaller cpu_pabits (e.g.\nthe Loongson-2K series) are still affected.\n\nDefine DIRECT_MAP_PHYSMEM_END as the vmemmap-covered physical range,\n(1ULL \u003c\u003c (cpu_pabits + 1)) - 1, capped at (1ULL \u003c\u003c MAX_PHYSMEM_BITS) - 1\nunder CONFIG_SPARSEMEM, similar to the commit f3336b48cf9d (\"riscv: mm:\nDefine DIRECT_MAP_PHYSMEM_END\").\n\n[1] https://lore.kernel.org/amd-gfx/20250814032153.227285-1-jeffbai@aosc.io/"
        }
      ],
      "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 - The missing DIRECT_MAP_PHYSMEM_END is consumed by gfr_start() inside get_free_mem_region() when kgd2kfd_init_zone_device() calls devm_request_free_mem_region(\u0026iomem_resource) from amdgpu device init (HSA_AMD depends on LOONGARCH \u0026\u0026 64BIT); that is local PCI-probe HMM setup, not a remote protocol message.\nAC:L - With GFR_DESCENDING, gfr_start() always starts at min(iomem_resource.end, the mm.h fallback (1ULL\u003c\u003cMAX_PHYSMEM_BITS)-1) minus size, so on a CPU with cpu_pabits+1 below 48 the first ZONE_DEVICE slot is above VMEMMAP_SIZE and vmemmap_populate() wraps with no race or victim-owned device fault.\nPR:L - amdgpu PCI probe runs kgd2kfd_init_zone_device()\u2192devm_memremap_pages() with no capable() check from userspace; after that wrap the unprivileged local account on a typical ROCm/desktop LoongArch host (render group, /dev/kfd with kfd_open() likewise ungated) shares the corrupted init_mm without init-namespace root.\nUI:N - amdgpu_device init itself calls kgd2kfd_init_zone_device() and then pagemap_range()\u2192add_pages()\u2192vmemmap_populate() on PCI bind; no victim must mount media, open a file, or click, and any NOUVEAU_SVM_BIND the attacker issues is on their own DRM fd.\nS:U - LoongArch vmemmap_populate() (vmemmap_set_pmd/vmemmap_populate_hugepages) writes PTEs via pgd_offset_k() into init_mm for the wrapped pfn_to_page() VA, which is host kernel MM corruption, not a KVM guest-to-host escape or IOMMU/DMA bypass.\nC:H - __populate_section_memmap() sets start to (unsigned long)pfn_to_page() of the out-of-window ZONE_DEVICE PFN, so vmemmap_populate() maps struct-page backing over low kernel VAs; memmap_init_zone_device() then stores page-\u003epgmap and flags through that alias, disclosing kernel pointers and data those VAs previously mapped.\nI:H - vmemmap_set_pmd() installs PAGE_KERNEL PMDs at the wrapped address and memmap_init_zone_device() writes struct-page fields through pfn_to_page() into that alias, an unconstrained kernel page-table and metadata write rather than a bounded data tweak.\nA:H - The same top-of-address-space region already crashed memmap_init_zone_device() with amdkfd on Loongson-3C6000, and on smaller cpu_pabits the wrap leaves init_mm PTEs pointing at the wrong physical pages so later pfn_to_page() walks oops or panic the host."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-25T12:42:39.505Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/ab275a23b4d9f04ca6c2f5f6a3246194e045a761"
        },
        {
          "url": "https://git.kernel.org/stable/c/55e18311c705cceef6c34d522ea387b1f0069bab"
        },
        {
          "url": "https://git.kernel.org/stable/c/2677f97a67fdbc62a82ce1faa67791f54451d36f"
        }
      ],
      "title": "LoongArch: Add DIRECT_MAP_PHYSMEM_END definition",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-93237",
    "datePublished": "2026-09-24T15:33:51.702Z",
    "dateReserved": "2026-09-17T16:02:15.095Z",
    "dateUpdated": "2026-09-25T12:42:39.505Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-93237",
      "date": "2026-09-28",
      "epss": "0.00173",
      "percentile": "0.06033"
    },
    "microsoft_vex": {
      "current_release_date": "2026-09-28T02:05:38.000Z",
      "cve": "CVE-2026-93237",
      "id": "msrc_CVE-2026-93237",
      "initial_release_date": "2026-09-28T02:05:38.000Z",
      "product_status:known_affected": "1",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "LoongArch: Add DIRECT_MAP_PHYSMEM_END definition",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-93237.json",
      "version": "1"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "arch/loongarch/include/asm/pgtable.h"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "ab275a23b4d9f04ca6c2f5f6a3246194e045a761",
                    "status": "affected",
                    "version": "7b09f5af01ede480cbe7abcb281cf17550a46ff5",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "55e18311c705cceef6c34d522ea387b1f0069bab",
                    "status": "affected",
                    "version": "7b09f5af01ede480cbe7abcb281cf17550a46ff5",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "2677f97a67fdbc62a82ce1faa67791f54451d36f",
                    "status": "affected",
                    "version": "7b09f5af01ede480cbe7abcb281cf17550a46ff5",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "arch/loongarch/include/asm/pgtable.h"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.2"
                  },
                  {
                    "lessThan": "6.2",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.51",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.5",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nLoongArch: Add DIRECT_MAP_PHYSMEM_END definition\n\nget_free_mem_region() and mhp_get_pluggable_range() bound their search\nto DIRECT_MAP_PHYSMEM_END. LoongArch does not define it, so the fallback\nin include/linux/mm.h applies: under CONFIG_SPARSEMEM_VMEMMAP it is\n(1ULL \u003c\u003c MAX_PHYSMEM_BITS) - 1, a compile-time constant that does not\nadapt to the CPU\u0027s physical address space bits (cpu_pabits, probed from\nCPUCFG1).\n\nThe vmemmap window only covers physical space below 2^(cpu_pabits+1)\n(i.e. VMEMMAP_SIZE), so on CPUs with fewer physical address bits than\nMAX_PHYSMEM_BITS the fallback allows get_free_mem_region() to return\na ZONE_DEVICE region outside the vmemmap window; vmemmap_populate() then\nwraps the memmap range around and maps it into low memory, silently\ncorrupting the page tables. The same search also picked the top-of-\naddress-space region that crashed memmap_init_zone_device() with amdkfd\non Loongson-3C6000 in 6.16 [1]; the commit 2969b42c8f99 (\"LoongArch/mm:\nalign vmemmap to maximal folio size\") keeps that region in bounds on\ncurrent Loongson-3C6000 configs, but CPUs with smaller cpu_pabits (e.g.\nthe Loongson-2K series) are still affected.\n\nDefine DIRECT_MAP_PHYSMEM_END as the vmemmap-covered physical range,\n(1ULL \u003c\u003c (cpu_pabits + 1)) - 1, capped at (1ULL \u003c\u003c MAX_PHYSMEM_BITS) - 1\nunder CONFIG_SPARSEMEM, similar to the commit f3336b48cf9d (\"riscv: mm:\nDefine DIRECT_MAP_PHYSMEM_END\").\n\n[1] https://lore.kernel.org/amd-gfx/20250814032153.227285-1-jeffbai@aosc.io/"
          }
        ],
        "id": "CVE-2026-93237",
        "lastModified": "2026-09-25T13:17:17.880",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-24T16:17:19.447",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/2677f97a67fdbc62a82ce1faa67791f54451d36f"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/55e18311c705cceef6c34d522ea387b1f0069bab"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/ab275a23b4d9f04ca6c2f5f6a3246194e045a761"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "suse_vex": {
      "aggregate_severity": "important",
      "current_release_date": "2026-09-25T23:50:08Z",
      "cve": "CVE-2026-93237",
      "id": "CVE-2026-93237",
      "initial_release_date": "2026-09-25T23:50:08Z",
      "product_status:known_not_affected": "347",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-93237",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-93237.json",
      "version": "2"
    }
  }
}



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…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…