{"id":"CVE-2026-46076","state":"PUBLISHED","title":"KVM: nSVM: Raise #UD if unhandled VMMCALL isn't intercepted by L1","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: nSVM: Raise #UD if unhandled VMMCALL isn't intercepted by L1\n\nExplicitly synthesize a #UD for VMMCALL if L2 is active, L1 does NOT want\nto intercept VMMCALL, nested_svm_l2_tlb_flush_enabled() is true, and the\nhypercall is something other than one of the supported Hyper-V hypercalls.\nWhen all of the above conditions are met, KVM will intercept VMMCALL but\nnever forward it to L1, i.e. will let L2 make hypercalls as if it were L1.\n\nThe TLFS says a whole lot of nothing about this scenario, so go with the\narchitectural behavior, which says that VMMCALL #UDs if it's not\nintercepted.\n\nOpportunistically do a 2-for-1 stub trade by stub-ifying the new API\ninstead of the helpers it uses.  The last remaining \"single\" stub will\nsoon be dropped as well.\n\n[sean: rewrite changelog and comment, tag for stable, remove defunct stubs]","publishedAt":"2026-05-27T12:58:09.169Z","updatedAt":"2026-10-21T12:41:18.394Z","severity":{"score":7.9,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"fcef67506c0234935cb0fb026740a637edb58d7c","versionType":"git"},{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"924d721fae95687acedbaf624a094ed0e8b67104","versionType":"git"},{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"009c0f726abeaa67aad1d96b883bdce01d405ce2","versionType":"git"},{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"5fb4a5f361565f5b629d8a8fe5288ce8463c5727","versionType":"git"},{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"c36991c6f8d2ab56ee67aff04e3c357f45cfc76c","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/x86/kvm/hyperv.h","arch/x86/kvm/svm/hyperv.h","arch/x86/kvm/svm/nested.c","arch/x86/kvm/svm/svm.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"6.2","status":"affected"},{"version":"0","status":"unaffected","lessThan":"6.2","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.86","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.27","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.4","status":"unaffected","lessThanOrEqual":"7.0.*","versionType":"semver"},{"version":"7.1","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/x86/kvm/hyperv.h","arch/x86/kvm/svm/hyperv.h","arch/x86/kvm/svm/nested.c","arch/x86/kvm/svm/svm.c"]}],"references":["https://git.kernel.org/stable/c/fcef67506c0234935cb0fb026740a637edb58d7c","https://git.kernel.org/stable/c/924d721fae95687acedbaf624a094ed0e8b67104","https://git.kernel.org/stable/c/009c0f726abeaa67aad1d96b883bdce01d405ce2","https://git.kernel.org/stable/c/5fb4a5f361565f5b629d8a8fe5288ce8463c5727","https://git.kernel.org/stable/c/c36991c6f8d2ab56ee67aff04e3c357f45cfc76c"],"weaknesses":["CWE-863"],"ingestedAt":"2026-10-29T20:12:07.131Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/46xxx/CVE-2026-46076.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-46076","state":"PUBLISHED","datePublished":"2026-05-27T12:58:09.169Z","dateUpdated":"2026-10-21T12:41:18.394Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-05-13T15:03:33.096Z"},"containers":{"cna":{"title":"KVM: nSVM: Raise #UD if unhandled VMMCALL isn't intercepted by L1","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: nSVM: Raise #UD if unhandled VMMCALL isn't intercepted by L1\n\nExplicitly synthesize a #UD for VMMCALL if L2 is active, L1 does NOT want\nto intercept VMMCALL, nested_svm_l2_tlb_flush_enabled() is true, and the\nhypercall is something other than one of the supported Hyper-V hypercalls.\nWhen all of the above conditions are met, KVM will intercept VMMCALL but\nnever forward it to L1, i.e. will let L2 make hypercalls as if it were L1.\n\nThe TLFS says a whole lot of nothing about this scenario, so go with the\narchitectural behavior, which says that VMMCALL #UDs if it's not\nintercepted.\n\nOpportunistically do a 2-for-1 stub trade by stub-ifying the new API\ninstead of the helpers it uses.  The last remaining \"single\" stub will\nsoon be dropped as well.\n\n[sean: rewrite changelog and comment, tag for stable, remove defunct stubs]"}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"fcef67506c0234935cb0fb026740a637edb58d7c","versionType":"git"},{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"924d721fae95687acedbaf624a094ed0e8b67104","versionType":"git"},{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"009c0f726abeaa67aad1d96b883bdce01d405ce2","versionType":"git"},{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"5fb4a5f361565f5b629d8a8fe5288ce8463c5727","versionType":"git"},{"version":"3f4a812edf5cb0a50e65fbdfafdb3e688da18f16","status":"affected","lessThan":"c36991c6f8d2ab56ee67aff04e3c357f45cfc76c","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/x86/kvm/hyperv.h","arch/x86/kvm/svm/hyperv.h","arch/x86/kvm/svm/nested.c","arch/x86/kvm/svm/svm.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"6.2","status":"affected"},{"version":"0","status":"unaffected","lessThan":"6.2","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.86","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.27","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.4","status":"unaffected","lessThanOrEqual":"7.0.*","versionType":"semver"},{"version":"7.1","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/x86/kvm/hyperv.h","arch/x86/kvm/svm/hyperv.h","arch/x86/kvm/svm/nested.c","arch/x86/kvm/svm/svm.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/fcef67506c0234935cb0fb026740a637edb58d7c"},{"url":"https://git.kernel.org/stable/c/924d721fae95687acedbaf624a094ed0e8b67104"},{"url":"https://git.kernel.org/stable/c/009c0f726abeaa67aad1d96b883bdce01d405ce2"},{"url":"https://git.kernel.org/stable/c/5fb4a5f361565f5b629d8a8fe5288ce8463c5727"},{"url":"https://git.kernel.org/stable/c/c36991c6f8d2ab56ee67aff04e3c357f45cfc76c"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:H","baseScore":7.9,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The path is reached by executing a VMMCALL instruction from within a nested (L2) guest running under KVM on AMD SVM; this is local execution against the hypervisor, not reachable via network, adjacent network, or physical interface.\nAC:L - Triggering is deterministic — once the nested setup exists (L1 does not intercept VMMCALL, e.g. relying on L0's Hyper-V direct L2 TLB-flush handling), a single VMMCALL in L2 reliably reaches L0's hypercall handler with no race or attacker-uncontrolled timing, mirroring sibling CVE-2026-43133.\nPR:L - The attacker must control a guest and run guest kernel-level (CPL0) code in the nested guest to set up and issue the hypercall; this is low privilege relative to the host and requires no real init-namespace root.\nUI:N - Exploitation is triggered solely by guest instruction execution (VMMCALL); no host-side or victim user action is required.\nS:C - The bug is in KVM's enforcement of the nested-virtualization boundary: L2's VMMCALL is serviced by L0 as if it were L1 instead of #UD'ing, so an L2 guest's action reaches and affects L1/L0-maintained state outside the L2 guest's own security authority.\nC:L - The improperly-handled hypercalls cause L0 to read L1-context memory (guest-physical addresses supplied by L2 are interpreted in the L1/host-maintained address space) and inspect the vCPU's Hyper-V state — a bounded cross-domain exposure, not an arbitrary host read primitive.\nI:L - L2 can drive L0 hypercalls that modify L1/host-maintained state (inject IPIs into the VM's vCPUs, post SynIC messages/signal events, request GPA-range operations), a bounded cross-domain state modification rather than an arbitrary write or code-execution primitive.\nA:H - L2 can repeatedly issue these hypercalls to force TLB flushes, inject IPIs, and corrupt the L1 hypervisor's Hyper-V messaging state, destabilizing or hanging the affected nested-virtualization workload at will — a complete loss of availability for that workload."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-21T12:41:18.394Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.2","versionEndExcluding":"6.6.160"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.2","versionEndExcluding":"6.12.86"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.2","versionEndExcluding":"6.18.27"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.2","versionEndExcluding":"7.0.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.2","versionEndExcluding":"7.1"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2026-46076","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2026-10-16T15:19:27.445501Z"}}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-863","lang":"en","type":"CWE","description":"CWE-863 Incorrect Authorization"}]}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-19T19:26:42.935Z"}}]}}}