{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-89513","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-09-11T19:38:34.717Z","datePublished":"2026-09-11T19:43:57.960Z","dateUpdated":"2026-09-13T06:30:17.247Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-09-13T06:30:17.247Z"},"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[<ffffffff8006471c>] kvm_riscv_vcpu_pmu_event_info+0xa4/0x142\n[<ffffffff800690c0>] kvm_sbi_ext_pmu_handler+0xca/0x268\n[<ffffffff8006779e>] kvm_riscv_vcpu_sbi_ecall+0xec/0x1e6\n[<ffffffff8006008c>] kvm_riscv_vcpu_exit+0x48c/0x540\n[<ffffffff8005ea0a>] 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":{"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"},"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."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/riscv/kvm/vcpu_pmu.c"],"versions":[{"version":"e309fd113b9f6c34672a487be08fecb7e12e7e29","lessThan":"82088f88c96b99c27a974d09b02c2b133262fadf","status":"affected","versionType":"git"},{"version":"e309fd113b9f6c34672a487be08fecb7e12e7e29","lessThan":"735bc20c24187ca419c9d5e63860a54b91be34bd","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/riscv/kvm/vcpu_pmu.c"],"versions":[{"version":"6.18","status":"affected"},{"version":"0","lessThan":"6.18","status":"unaffected","versionType":"semver"},{"version":"7.2.4","lessThanOrEqual":"7.2.*","status":"unaffected","versionType":"semver"},{"version":"7.3-rc1","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.18","versionEndExcluding":"7.2.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.18","versionEndExcluding":"7.3-rc1"}]}]}],"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"}}}}