{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-37936", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T04:51:23.971Z", "datePublished": "2025-05-20T15:22:00.557Z", "dateUpdated": "2026-08-05T11:58:29.520Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:58:29.520Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nperf/x86/intel: KVM: Mask PEBS_ENABLE loaded for guest with vCPU's value.\n\nWhen generating the MSR_IA32_PEBS_ENABLE value that will be loaded on\nVM-Entry to a KVM guest, mask the value with the vCPU's desired PEBS_ENABLE\nvalue. Consulting only the host kernel's host vs. guest masks results in\nrunning the guest with PEBS enabled even when the guest doesn't want to use\nPEBS. Because KVM uses perf events to proxy the guest virtual PMU, simply\nlooking at exclude_host can't differentiate between events created by host\nuserspace, and events created by KVM on behalf of the guest.\n\nRunning the guest with PEBS unexpectedly enabled typically manifests as\ncrashes due to a near-infinite stream of #PFs. E.g. if the guest hasn't\nwritten MSR_IA32_DS_AREA, the CPU will hit page faults on address '0' when\ntrying to record PEBS events.\n\nThe issue is most easily reproduced by running `perf kvm top` from before\ncommit 7b100989b4f6 (\"perf evlist: Remove __evlist__add_default\") (after\nwhich, `perf kvm top` effectively stopped using PEBS).\tThe userspace side\nof perf creates a guest-only PEBS event, which intel_guest_get_msrs()\nmisconstrues a guest-*owned* PEBS event.\n\nArguably, this is a userspace bug, as enabling PEBS on guest-only events\nsimply cannot work, and userspace can kill VMs in many other ways (there\nis no danger to the host). However, even if this is considered to be bad\nuserspace behavior, there's zero downside to perf/KVM restricting PEBS to\nguest-owned events.\n\nNote, commit 854250329c02 (\"KVM: x86/pmu: Disable guest PEBS temporarily\nin two rare situations\") fixed the case where host userspace is profiling\nKVM *and* userspace, but missed the case where userspace is profiling only\nKVM." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:H/A:H", "baseScore": 8.7, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - Exploitation requires a local `perf_event_open()` syscall on the virtualization host to create a guest-only PEBS event; there is no network-reachable path to `intel_guest_get_msrs()`.\nAC:L - The attacker deterministically creates an `exclude_host` + `precise_ip` event and the miscomputed `MSR_IA32_PEBS_ENABLE` guest value is then loaded on every VM-entry on that CPU — no race, no memory-layout dependency, and `pebs_ept` hardware (Icelake-X and later) is the standard CPU generation for KVM hosts.\nPR:L - `exclude_host` and `precise_ip` carry no capability check in `perf_event_open()`, so an unprivileged local user can create the triggering event per-task against a vCPU thread, or system-wide on the many hosts running `perf_event_paranoid <= 0`.\nUI:N - No victim action is needed — the buggy MSR list is rebuilt automatically on every VM-entry of the already-running guests on the host.\nS:C - The defect is in the host kernel's perf/KVM code but the impact crosses the host/guest boundary into guest VMs, which are a distinct security authority the attacking host user has no privileges over.\nC:L - PEBS records generated for a host-owned counter are deposited into guest-readable memory and spurious PEBS PMIs are injected into the guest, and records overshooting the entry boundary can carry host-context register/RIP data across into the guest — a bounded rather than arbitrary disclosure.\nI:H - The hardware writes PEBS records into guest memory at a DS_AREA the guest never armed for PEBS — the kernel's own comment states such writes \"corrupt guest memory\" — giving uncontrolled corruption of guest kernel structures that can be leveraged against the guest's integrity.\nA:H - The documented and reported manifestation is a near-infinite stream of #PFs that crashes or hangs the guest, denying service to every VM the attacker's event overlaps while also burning the host CPU in an entry/exit loop." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "arch/x86/events/intel/core.c" ], "versions": [ { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "160153cf9e4aa875ad086cc094ce34aac8e13d63", "status": "affected", "versionType": "git" }, { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "34b6fa11431aef71045ae5a00d90a7d630597eda", "status": "affected", "versionType": "git" }, { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "44ee0afc9d1e7a7c1932698de01362ed80cfc4b5", "status": "affected", "versionType": "git" }, { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "86aa62895fc2fb7ab09d7ca40fae8ad09841f66b", "status": "affected", "versionType": "git" }, { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "58f6217e5d0132a9f14e401e62796916aa055c1b", "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/x86/events/intel/core.c" ], "versions": [ { "version": "6.0", "status": "affected" }, { "version": "0", "lessThan": "6.0", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.138", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.90", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.28", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.14.6", "lessThanOrEqual": "6.14.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.15", "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.0", "versionEndExcluding": "6.1.138" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.0", "versionEndExcluding": "6.6.90" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.0", "versionEndExcluding": "6.12.28" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.0", "versionEndExcluding": "6.14.6" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.0", "versionEndExcluding": "6.15" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/160153cf9e4aa875ad086cc094ce34aac8e13d63" }, { "url": "https://git.kernel.org/stable/c/34b6fa11431aef71045ae5a00d90a7d630597eda" }, { "url": "https://git.kernel.org/stable/c/44ee0afc9d1e7a7c1932698de01362ed80cfc4b5" }, { "url": "https://git.kernel.org/stable/c/86aa62895fc2fb7ab09d7ca40fae8ad09841f66b" }, { "url": "https://git.kernel.org/stable/c/58f6217e5d0132a9f14e401e62796916aa055c1b" } ], "title": "perf/x86/intel: KVM: Mask PEBS_ENABLE loaded for guest with vCPU's value.", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "title": "CVE Program Container", "references": [ { "url": "https://lists.debian.org/debian-lts-announce/2025/08/msg00010.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T19:57:31.811Z" } } ] } }