{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-26992", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-02-19T14:20:24.205Z", "datePublished": "2024-05-01T05:27:57.967Z", "dateUpdated": "2026-08-05T11:28:52.706Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:28:52.706Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: x86/pmu: Disable support for adaptive PEBS\n\nDrop support for virtualizing adaptive PEBS, as KVM's implementation is\narchitecturally broken without an obvious/easy path forward, and because\nexposing adaptive PEBS can leak host LBRs to the guest, i.e. can leak\nhost kernel addresses to the guest.\n\nBug #1 is that KVM doesn't account for the upper 32 bits of\nIA32_FIXED_CTR_CTRL when (re)programming fixed counters, e.g\nfixed_ctrl_field() drops the upper bits, reprogram_fixed_counters()\nstores local variables as u8s and truncates the upper bits too, etc.\n\nBug #2 is that, because KVM _always_ sets precise_ip to a non-zero value\nfor PEBS events, perf will _always_ generate an adaptive record, even if\nthe guest requested a basic record. Note, KVM will also enable adaptive\nPEBS in individual *counter*, even if adaptive PEBS isn't exposed to the\nguest, but this is benign as MSR_PEBS_DATA_CFG is guaranteed to be zero,\ni.e. the guest will only ever see Basic records.\n\nBug #3 is in perf. intel_pmu_disable_fixed() doesn't clear the upper\nbits either, i.e. leaves ICL_FIXED_0_ADAPTIVE set, and\nintel_pmu_enable_fixed() effectively doesn't clear ICL_FIXED_0_ADAPTIVE\neither. I.e. perf _always_ enables ADAPTIVE counters, regardless of what\nKVM requests.\n\nBug #4 is that adaptive PEBS *might* effectively bypass event filters set\nby the host, as \"Updated Memory Access Info Group\" records information\nthat might be disallowed by userspace via KVM_SET_PMU_EVENT_FILTER.\n\nBug #5 is that KVM doesn't ensure LBR MSRs hold guest values (or at least\nzeros) when entering a vCPU with adaptive PEBS, which allows the guest\nto read host LBRs, i.e. host RIPs/addresses, by enabling \"LBR Entries\"\nrecords.\n\nDisable adaptive PEBS support as an immediate fix due to the severity of\nthe LBR leak in particular, and because fixing all of the bugs will be\nnon-trivial, e.g. not suitable for backporting to stable kernels.\n\nNote! This will break live migration, but trying to make KVM play nice\nwith live migration would be quite complicated, wouldn't be guaranteed to\nwork (i.e. KVM might still kill/confuse the guest), and it's not clear\nthat there are any publicly available VMMs that support adaptive PEBS,\nlet alone live migrate VMs that support adaptive PEBS, e.g. QEMU doesn't\nsupport PEBS in any capacity." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N", "baseScore": 7.3, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The attacker must execute code inside a KVM guest on the target host (or open /dev/kvm locally and build a minimal VMM); the vulnerable KVM PMU/PEBS MSR path is not bound to any network stack.\nAC:L - Adaptive PEBS is exposed by default on any adaptive-PEBS-capable host (perf_capabilities is seeded from kvm_caps.supported_perf_cap at vCPU creation, enable_pmu defaults on, and DS/DTES64/PDCM come free from KVM_GET_SUPPORTED_CPUID), so the guest just writes DS_AREA, PEBS_DATA_CFG with the LBRS bit, and PEBS_ENABLE — no race, no memory-layout dependency, and the leak repeats on every VM entry.\nPR:L - The attacker needs only the ability to run a VM on the host — a cloud tenant or any local user with /dev/kvm access — and supplies the guest ring-0 code themselves; no host-side privilege or administrator configuration is required.\nUI:N - The guest performs the MSR writes and reads its own DS buffer entirely on its own; no host user or administrator action is involved.\nS:C - The vulnerable component is host-kernel KVM but the attacker operates in the guest security authority, and exploitation transfers host-kernel data (LBR RIPs) across the VM boundary and defeats a host-configured policy (KVM_SET_PMU_EVENT_FILTER), so the impacted authority differs from the attacking one.\nC:H - The guest harvests the host's Last Branch Record stack — host kernel RIPs and control-flow history, and on shared pCPUs potentially other guests' addresses — repeatedly at every VM entry, defeating host KASLR and enabling branch-trace side-channel recovery of host secrets; the maintainer disabled the feature outright citing \"the severity of the LBR leak in particular.\"\nI:L - The guest subverts host-imposed PMU policy by bypassing KVM_SET_PMU_EVENT_FILTER via the \"Updated Memory Access Info\" group, and guest-driven adaptive programming persists in host PMU state because intel_pmu_disable_fixed() never clears ICL_FIXED_0_ADAPTIVE, perturbing the host's own perf records; there is no arbitrary-write or code-execution primitive against the host.\nA:N - PEBS record writes are confined to guest memory through EPT and the host DS_AREA/PEBS_DATA_CFG are restored by the VM-exit MSR-load list, so no host panic, hang, or resource exhaustion results; the only breakage described is confusion of the attacker's own guest." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "arch/x86/kvm/vmx/vmx.c" ], "versions": [ { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "0fb74c00d140a66128afc0003785dcc57e69d312", "status": "affected", "versionType": "git" }, { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "037e48ceccf163899374b601afb6ae8d0bf1d2ac", "status": "affected", "versionType": "git" }, { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "7a7650b3ac23e5fc8c990f00e94f787dc84e3175", "status": "affected", "versionType": "git" }, { "version": "c59a1f106f5cd4843c097069ff1bb2ad72103a67", "lessThan": "9e985cbf2942a1bb8fcef9adc2a17d90fd7ca8ee", "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/kvm/vmx/vmx.c" ], "versions": [ { "version": "6.0", "status": "affected" }, { "version": "0", "lessThan": "6.0", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.88", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.29", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.8.8", "lessThanOrEqual": "6.8.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.9", "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.88" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.0", "versionEndExcluding": "6.6.29" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.0", "versionEndExcluding": "6.8.8" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.0", "versionEndExcluding": "6.9" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/0fb74c00d140a66128afc0003785dcc57e69d312" }, { "url": "https://git.kernel.org/stable/c/037e48ceccf163899374b601afb6ae8d0bf1d2ac" }, { "url": "https://git.kernel.org/stable/c/7a7650b3ac23e5fc8c990f00e94f787dc84e3175" }, { "url": "https://git.kernel.org/stable/c/9e985cbf2942a1bb8fcef9adc2a17d90fd7ca8ee" } ], "title": "KVM: x86/pmu: Disable support for adaptive PEBS", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "title": "CVE Program Container", "references": [ { "url": "https://git.kernel.org/stable/c/0fb74c00d140a66128afc0003785dcc57e69d312", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/037e48ceccf163899374b601afb6ae8d0bf1d2ac", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/7a7650b3ac23e5fc8c990f00e94f787dc84e3175", "tags": [ "x_transferred" ] }, { "url": "https://git.kernel.org/stable/c/9e985cbf2942a1bb8fcef9adc2a17d90fd7ca8ee", "tags": [ "x_transferred" ] }, { "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/DAMSOZXJEPUOXW33WZYWCVAY7Z5S7OOY/" }, { "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/4EZ6PJW7VOZ224TD7N4JZNU6KV32ZJ53/" }, { "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/GCBZZEC7L7KTWWAS2NLJK6SO3IZIL4WW/" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-04T17:15:44.124Z" } }, { "metrics": [ { "other": { "type": "ssvc", "content": { "id": "CVE-2024-26992", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2024-09-10T15:44:53.201167Z" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-09-11T17:33:39.904Z" } } ] } }