CVE-2025-37849 (GCVE-0-2025-37849)
Vulnerability from cvelistv5
Published
2025-05-09 06:41
Modified
2026-08-05 11:57
Summary
In the Linux kernel, the following vulnerability has been resolved: KVM: arm64: Tear down vGIC on failed vCPU creation If kvm_arch_vcpu_create() fails to share the vCPU page with the hypervisor, we propagate the error back to the ioctl but leave the vGIC vCPU data initialised. Note only does this leak the corresponding memory when the vCPU is destroyed but it can also lead to use-after-free if the redistributor device handling tries to walk into the vCPU. Add the missing cleanup to kvm_arch_vcpu_create(), ensuring that the vGIC vCPU structures are destroyed on error.
Impacted products
Vendor Product Version
Linux Linux Version: 6211753fdfd05af9e08f54c8d0ba3ee516034878
Version: 6211753fdfd05af9e08f54c8d0ba3ee516034878
Version: 6211753fdfd05af9e08f54c8d0ba3ee516034878
Version: 6211753fdfd05af9e08f54c8d0ba3ee516034878
Version: 6211753fdfd05af9e08f54c8d0ba3ee516034878
Version: 6211753fdfd05af9e08f54c8d0ba3ee516034878
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "providerMetadata": {
          "dateUpdated": "2025-11-03T19:56:22.007Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "url": "https://lists.debian.org/debian-lts-announce/2025/05/msg00045.html"
          }
        ],
        "title": "CVE Program Container"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "arch/arm64/kvm/arm.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "07476e0d932afc53c05468076393ac35d0b4999e",
              "status": "affected",
              "version": "6211753fdfd05af9e08f54c8d0ba3ee516034878",
              "versionType": "git"
            },
            {
              "lessThan": "5085e02362b9948f82fceca979b8f8e12acb1cc5",
              "status": "affected",
              "version": "6211753fdfd05af9e08f54c8d0ba3ee516034878",
              "versionType": "git"
            },
            {
              "lessThan": "c322789613407647a05ff5c451a7bf545fb34e73",
              "status": "affected",
              "version": "6211753fdfd05af9e08f54c8d0ba3ee516034878",
              "versionType": "git"
            },
            {
              "lessThan": "2480326eba8ae9ccc5e4c3c2dc8d407db68e3c52",
              "status": "affected",
              "version": "6211753fdfd05af9e08f54c8d0ba3ee516034878",
              "versionType": "git"
            },
            {
              "lessThan": "f1e9087abaeedec9bf2894a282ee4f0d8383f299",
              "status": "affected",
              "version": "6211753fdfd05af9e08f54c8d0ba3ee516034878",
              "versionType": "git"
            },
            {
              "lessThan": "250f25367b58d8c65a1b060a2dda037eea09a672",
              "status": "affected",
              "version": "6211753fdfd05af9e08f54c8d0ba3ee516034878",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/arm64/kvm/arm.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.11"
            },
            {
              "lessThan": "3.11",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.135",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.88",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.24",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.13.*",
              "status": "unaffected",
              "version": "6.13.12",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.14.*",
              "status": "unaffected",
              "version": "6.14.3",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.15",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.135",
                  "versionStartIncluding": "3.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.88",
                  "versionStartIncluding": "3.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.24",
                  "versionStartIncluding": "3.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.13.12",
                  "versionStartIncluding": "3.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.14.3",
                  "versionStartIncluding": "3.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.15",
                  "versionStartIncluding": "3.11",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: arm64: Tear down vGIC on failed vCPU creation\n\nIf kvm_arch_vcpu_create() fails to share the vCPU page with the\nhypervisor, we propagate the error back to the ioctl but leave the\nvGIC vCPU data initialised. Note only does this leak the corresponding\nmemory when the vCPU is destroyed but it can also lead to use-after-free\nif the redistributor device handling tries to walk into the vCPU.\n\nAdd the missing cleanup to kvm_arch_vcpu_create(), ensuring that the\nvGIC vCPU structures are destroyed on error."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerability is reached through the KVM_CREATE_VCPU ioctl on a VM file descriptor obtained from /dev/kvm, requiring local system access. No network or physical vector is involved.\nAC:L - The attacker controls every precondition: setting the GICv3 redistributor base to force iodev registration, and driving kvm_share_hyp() to -ENOMEM via memory pressure or hyp-pool exhaustion through repeated VM creation on nVHE/pKVM hosts, then replaying the create attempt in a loop until it fails.\nPR:L - Only an open fd to /dev/kvm is needed, which unprivileged local users routinely hold (0666 on several distros, kvm-group membership elsewhere, and standard in nested-virt/cloud and Android AVF deployments); no capability check guards KVM_CREATE_VCPU.\nUI:N - The attacker performs the entire sequence \u2014 create VM, set the redistributor address, force the failing vCPU creation, then run a vCPU or destroy the VM to touch the stale iodev \u2014 with no action from any other user.\nS:C - The stale redistributor iodev leaves a guest-reachable MMIO handler pointing into freed host kernel memory, so a confined guest\u0027s ordinary access to the redistributor region drives indirect calls through freed host-kernel data, crossing the guest/host security boundary; this also matches scoring of comparable KVM arm64 vGIC use-after-free issues.\nC:H - The use-after-free lets the attacker reclaim the freed kvm_vcpu slab object and have dispatch_mmio_read() return attacker-influenced host kernel memory contents to the guest via the redistributor MMIO read path, yielding arbitrary kernel memory disclosure.\nI:H - kvm_iodevice_write()/kvm_iodevice_destructor() dereference dev-\u003eops from the freed object and dispatch_mmio_write() makes a second indirect call through region-\u003ewrite, so heap grooming of the freed kvm_vcpu object gives control-flow hijack and arbitrary write in the host kernel.\nA:H - Even without successful grooming, dereferencing the dangling kvm_io_device on guest MMIO or during kvm_io_bus_destroy() at VM teardown oopses the host kernel, and each failed vCPU creation additionally leaks the private_irqs allocation."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:57:49.979Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/07476e0d932afc53c05468076393ac35d0b4999e"
        },
        {
          "url": "https://git.kernel.org/stable/c/5085e02362b9948f82fceca979b8f8e12acb1cc5"
        },
        {
          "url": "https://git.kernel.org/stable/c/c322789613407647a05ff5c451a7bf545fb34e73"
        },
        {
          "url": "https://git.kernel.org/stable/c/2480326eba8ae9ccc5e4c3c2dc8d407db68e3c52"
        },
        {
          "url": "https://git.kernel.org/stable/c/f1e9087abaeedec9bf2894a282ee4f0d8383f299"
        },
        {
          "url": "https://git.kernel.org/stable/c/250f25367b58d8c65a1b060a2dda037eea09a672"
        }
      ],
      "title": "KVM: arm64: Tear down vGIC on failed vCPU creation",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-37849",
    "datePublished": "2025-05-09T06:41:56.874Z",
    "dateReserved": "2025-04-16T04:51:23.954Z",
    "dateUpdated": "2026-08-05T11:57:49.979Z",
    "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…