{
    "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-10-19T08:48:04.610Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-10-19T08:48:04.610Z"
            },
            "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": "ddbd71a3780942918a7d116d666313e5b3304d73",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "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": "6.18.57",
                            "lessThanOrEqual": "6.18.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "7.2.4",
                            "lessThanOrEqual": "7.2.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "7.3",
                            "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": "6.18.57"
                                },
                                {
                                    "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"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/ddbd71a3780942918a7d116d666313e5b3304d73"
                },
                {
                    "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"
            }
        }
    }
}