GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2026-89513 (GCVE-0-2026-89513)

Vulnerability from cvelistv5 – Published: 2026-09-11 19:43 – Updated: 2026-09-13 06:30
VLAI
Title
RISC-V: KVM: Fix PMU event info array size overflow
Summary
In the Linux kernel, the following vulnerability has been resolved: RISC-V: KVM: Fix PMU event info array size overflow SBI PMU EVENT_GET_INFO stores guest-controlled num_events * sizeof(*einfo) in a 32-bit integer. On RV64, num_events = 0x10000001 makes 0x100000010 truncate to 16. KVM then allocates one entry but loops over the original num_events, causing out-of-bounds reads and writes. A nested guest triggered: BUG: KASAN: slab-out-of-bounds in kvm_riscv_vcpu_pmu_event_info+0xa4/0x142 Read of size 4 at addr ff600000074d46b0 by task init/1 Call Trace: [<ffffffff8006471c>] kvm_riscv_vcpu_pmu_event_info+0xa4/0x142 [<ffffffff800690c0>] kvm_sbi_ext_pmu_handler+0xca/0x268 [<ffffffff8006779e>] kvm_riscv_vcpu_sbi_ecall+0xec/0x1e6 [<ffffffff8006008c>] kvm_riscv_vcpu_exit+0x48c/0x540 [<ffffffff8005ea0a>] kvm_arch_vcpu_ioctl_run+0x37e/0xc80 Allocated by task 1: __kmalloc_noprof+0x19e/0x4b0 kvm_riscv_vcpu_pmu_event_info+0x72/0x142 kvm_sbi_ext_pmu_handler+0xca/0x268 kvm_riscv_vcpu_sbi_ecall+0xec/0x1e6 kvm_riscv_vcpu_exit+0x48c/0x540 kvm_arch_vcpu_ioctl_run+0x37e/0xc80 The buggy address is located 0 bytes to the right of allocated 16-byte region [ff600000074d46a0, ff600000074d46b0) Store the shared-memory size in size_t and reject multiplication overflow. Allocate the guest-driven array with GFP_KERNEL_ACCOUNT so it is charged to kmemcg, and use __GFP_NOWARN to suppress allocation failure warnings. Use kvcalloc() to allow vmalloc fallback and an unsigned long loop index to match num_events.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: e309fd113b9f6c34672a487be08fecb7e12e7e29 , < 82088f88c96b99c27a974d09b02c2b133262fadf (git)
Affected: e309fd113b9f6c34672a487be08fecb7e12e7e29 , < 735bc20c24187ca419c9d5e63860a54b91be34bd (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.18
Unaffected: 0 , < 6.18 (semver)
Unaffected: 7.2.4 , ≤ 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/riscv/kvm/vcpu_pmu.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "82088f88c96b99c27a974d09b02c2b133262fadf",
              "status": "affected",
              "version": "e309fd113b9f6c34672a487be08fecb7e12e7e29",
              "versionType": "git"
            },
            {
              "lessThan": "735bc20c24187ca419c9d5e63860a54b91be34bd",
              "status": "affected",
              "version": "e309fd113b9f6c34672a487be08fecb7e12e7e29",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/riscv/kvm/vcpu_pmu.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.18"
            },
            {
              "lessThan": "6.18",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "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": "7.2.4",
                  "versionStartIncluding": "6.18",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "6.18",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nRISC-V: KVM: Fix PMU event info array size overflow\n\nSBI PMU EVENT_GET_INFO stores guest-controlled num_events * sizeof(*einfo)\nin a 32-bit integer. On RV64, num_events = 0x10000001 makes 0x100000010\ntruncate to 16. KVM then allocates one entry but loops over the original\nnum_events, causing out-of-bounds reads and writes. A nested guest\ntriggered:\n\nBUG: KASAN: slab-out-of-bounds in kvm_riscv_vcpu_pmu_event_info+0xa4/0x142\nRead of size 4 at addr ff600000074d46b0 by task init/1\nCall Trace:\n[\u003cffffffff8006471c\u003e] kvm_riscv_vcpu_pmu_event_info+0xa4/0x142\n[\u003cffffffff800690c0\u003e] kvm_sbi_ext_pmu_handler+0xca/0x268\n[\u003cffffffff8006779e\u003e] kvm_riscv_vcpu_sbi_ecall+0xec/0x1e6\n[\u003cffffffff8006008c\u003e] kvm_riscv_vcpu_exit+0x48c/0x540\n[\u003cffffffff8005ea0a\u003e] kvm_arch_vcpu_ioctl_run+0x37e/0xc80\nAllocated by task 1:\n __kmalloc_noprof+0x19e/0x4b0\n kvm_riscv_vcpu_pmu_event_info+0x72/0x142\n kvm_sbi_ext_pmu_handler+0xca/0x268\n kvm_riscv_vcpu_sbi_ecall+0xec/0x1e6\n kvm_riscv_vcpu_exit+0x48c/0x540\n kvm_arch_vcpu_ioctl_run+0x37e/0xc80\nThe buggy address is located 0 bytes to the right of\n allocated 16-byte region [ff600000074d46a0, ff600000074d46b0)\n\nStore the shared-memory size in size_t and reject multiplication overflow.\nAllocate the guest-driven array with GFP_KERNEL_ACCOUNT so it is charged\nto kmemcg, and use __GFP_NOWARN to suppress allocation failure warnings.\nUse kvcalloc() to allow vmalloc fallback and an unsigned long loop index\nto match num_events."
        }
      ],
      "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 overflow is reached when a RISC-V KVM guest issues an SBI ECALL (EXC_SUPERVISOR_SYSCALL) for SBI_EXT_PMU_EVENT_GET_INFO, handled on the host KVM_RUN path via kvm_riscv_vcpu_exit, kvm_riscv_vcpu_sbi_ecall, kvm_sbi_ext_pmu_handler, and kvm_riscv_vcpu_pmu_event_info; this is a local guest hypercall path with no network or physical exposure.\nAC:L - A guest that sets flags=0, a 16-byte-aligned shared-memory GPA, and num_events=0x10000001 on RV64 makes num_events*sizeof(*einfo) truncate from 0x100000010 to 16, so kzalloc gets one entry while the loop uses the original count; the attacker controls every parameter and needs no race or uncontrollable host layout.\nPR:L - Issuing the SBI ECALL requires VS-mode in a KVM guest (tenant kernel or custom image) or a host kvm-group user running QEMU, not host init-namespace root; kvm_sbi_ext_pmu_handler has no capability check, and SBI PMU is enabled by default once kvm_riscv_vcpu_pmu_init succeeds.\nUI:N - The attacker guest issues SBI_EXT_PMU_EVENT_GET_INFO itself during KVM_RUN; no separate victim action such as attaching a device, mounting a filesystem, or confirming a prompt is required.\nS:C - The slab out-of-bounds access runs in the host kernel while handling a guest SBI call, crossing the KVM guest-to-hypervisor boundary so host heap corruption can compromise the hypervisor and co-located VMs, which CNA guidance rates Changed for KVM guest-to-host escape.\nC:H - After the truncated 16-byte allocation, the loop reads event_idx and event_data from adjacent host slab for 0x10000001 entries; that unbounded host-heap out-of-bounds read, together with the following heap corruption, can be leveraged for kernel memory disclosure.\nI:H - The same loop writes einfo[i].output (0 or 1) past the 16-byte object at a 16-byte stride for about 2^28 iterations, an unbounded host-slab out-of-bounds write that smashes neighboring objects and heap metadata and is scored High per CNA out-of-bounds-write guidance.\nA:H - KASAN reported a host slab-out-of-bounds in kvm_riscv_vcpu_pmu_event_info, and walking billions of bytes past a 16-byte allocation reliably oopses or panics the host kernel, denying service to the hypervisor and every co-located VM."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-13T06:30:17.247Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/82088f88c96b99c27a974d09b02c2b133262fadf"
        },
        {
          "url": "https://git.kernel.org/stable/c/735bc20c24187ca419c9d5e63860a54b91be34bd"
        }
      ],
      "title": "RISC-V: KVM: Fix PMU event info array size overflow",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89513",
    "datePublished": "2026-09-11T19:43:57.960Z",
    "dateReserved": "2026-09-11T19:38:34.717Z",
    "dateUpdated": "2026-09-13T06:30:17.247Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89513",
      "date": "2026-09-15",
      "epss": "0.0012",
      "percentile": "0.02099"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-89513\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-11T20:19:33.787\",\"lastModified\":\"2026-09-13T07:17:14.203\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nRISC-V: KVM: Fix PMU event info array size overflow\\n\\nSBI PMU EVENT_GET_INFO stores guest-controlled num_events * sizeof(*einfo)\\nin a 32-bit integer. On RV64, num_events = 0x10000001 makes 0x100000010\\ntruncate to 16. KVM then allocates one entry but loops over the original\\nnum_events, causing out-of-bounds reads and writes. A nested guest\\ntriggered:\\n\\nBUG: KASAN: slab-out-of-bounds in kvm_riscv_vcpu_pmu_event_info+0xa4/0x142\\nRead of size 4 at addr ff600000074d46b0 by task init/1\\nCall Trace:\\n[\u003cffffffff8006471c\u003e] kvm_riscv_vcpu_pmu_event_info+0xa4/0x142\\n[\u003cffffffff800690c0\u003e] kvm_sbi_ext_pmu_handler+0xca/0x268\\n[\u003cffffffff8006779e\u003e] kvm_riscv_vcpu_sbi_ecall+0xec/0x1e6\\n[\u003cffffffff8006008c\u003e] kvm_riscv_vcpu_exit+0x48c/0x540\\n[\u003cffffffff8005ea0a\u003e] kvm_arch_vcpu_ioctl_run+0x37e/0xc80\\nAllocated by task 1:\\n __kmalloc_noprof+0x19e/0x4b0\\n kvm_riscv_vcpu_pmu_event_info+0x72/0x142\\n kvm_sbi_ext_pmu_handler+0xca/0x268\\n kvm_riscv_vcpu_sbi_ecall+0xec/0x1e6\\n kvm_riscv_vcpu_exit+0x48c/0x540\\n kvm_arch_vcpu_ioctl_run+0x37e/0xc80\\nThe buggy address is located 0 bytes to the right of\\n allocated 16-byte region [ff600000074d46a0, ff600000074d46b0)\\n\\nStore the shared-memory size in size_t and reject multiplication overflow.\\nAllocate the guest-driven array with GFP_KERNEL_ACCOUNT so it is charged\\nto kmemcg, and use __GFP_NOWARN to suppress allocation failure warnings.\\nUse kvcalloc() to allow vmalloc fallback and an unsigned long loop index\\nto match num_events.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"arch/riscv/kvm/vcpu_pmu.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"e309fd113b9f6c34672a487be08fecb7e12e7e29\",\"lessThan\":\"82088f88c96b99c27a974d09b02c2b133262fadf\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"e309fd113b9f6c34672a487be08fecb7e12e7e29\",\"lessThan\":\"735bc20c24187ca419c9d5e63860a54b91be34bd\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"arch/riscv/kvm/vcpu_pmu.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.18\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.18\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2.4\",\"lessThanOrEqual\":\"7.2.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.3-rc1\",\"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:C/C:H/I:H/A:H\",\"baseScore\":8.8,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"CHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":2.0,\"impactScore\":6.0}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/735bc20c24187ca419c9d5e63860a54b91be34bd\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/82088f88c96b99c27a974d09b02c2b133262fadf\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Important",
      "current_release_date": "2026-09-13T06:49:47+00:00",
      "cve": "CVE-2026-89513",
      "id": "CVE-2026-89513",
      "initial_release_date": "2026-09-11T19:43:57.960000+00:00",
      "product_status:known_affected": "2",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: Linux kernel KVM (RISC-V): Memory corruption due to PMU event info array overflow",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89513.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "important",
      "current_release_date": "2026-09-16T00:02:30Z",
      "cve": "CVE-2026-89513",
      "id": "CVE-2026-89513",
      "initial_release_date": "2026-09-12T16:27:09Z",
      "product_status:known_not_affected": "353",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-89513",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-89513.json",
      "version": "3"
    }
  }
}



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…

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…