{"id":"CVE-2026-64106","state":"PUBLISHED","title":"KVM: arm64: vgic-its: Reject restored DTE with out-of-range num_eventid_bits","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: arm64: vgic-its: Reject restored DTE with out-of-range num_eventid_bits\n\nUserspace can restore an ITS Device Table Entry whose Size field encodes\nmore EventID bits than the virtual ITS supports.  The live MAPD path\nrejects that state, but vgic_its_restore_dte() accepts it and stores the\nout-of-range value in dev->num_eventid_bits.\n\nReject restored DTEs with num_eventid_bits > VITS_TYPER_IDBITS before\nallocating the device.  This mirrors the MAPD check and prevents the\nrestored state from reaching vgic_its_restore_itt(), where the unchecked\nvalue can be converted into an oversized scan_its_table() range.","publishedAt":"2026-07-19T15:40:09.344Z","updatedAt":"2026-10-19T20:28:12.062Z","severity":{"score":9,"label":"Critical","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"1716b7fea2ead941a0dfac06c4504a3437cdf00d","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"dab9f93251b2c86a033de6098d0c73afddd55d4a","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"b94538186a3eae3763b8f96dacd610920a865aa7","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"0680f511926589206f81f57f76ce131d7741a316","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"8bcd15b690a390241179516af1b6ae49ebfd9d95","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"9ce754ed8e7ab4e3999767ce1505f85c449ccb07","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/arm64/kvm/vgic/vgic-its.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.12","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.12","versionType":"semver"},{"version":"6.1.175","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.142","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.92","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.34","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.11","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/arm64/kvm/vgic/vgic-its.c"]}],"references":["https://git.kernel.org/stable/c/1716b7fea2ead941a0dfac06c4504a3437cdf00d","https://git.kernel.org/stable/c/dab9f93251b2c86a033de6098d0c73afddd55d4a","https://git.kernel.org/stable/c/b94538186a3eae3763b8f96dacd610920a865aa7","https://git.kernel.org/stable/c/0680f511926589206f81f57f76ce131d7741a316","https://git.kernel.org/stable/c/8bcd15b690a390241179516af1b6ae49ebfd9d95","https://git.kernel.org/stable/c/9ce754ed8e7ab4e3999767ce1505f85c449ccb07"],"weaknesses":["CWE-20"],"ingestedAt":"2026-10-29T20:12:41.951Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/64xxx/CVE-2026-64106.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-64106","state":"PUBLISHED","datePublished":"2026-07-19T15:40:09.344Z","dateUpdated":"2026-10-19T20:28:12.062Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-07-19T07:54:57.034Z"},"containers":{"cna":{"title":"KVM: arm64: vgic-its: Reject restored DTE with out-of-range num_eventid_bits","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: arm64: vgic-its: Reject restored DTE with out-of-range num_eventid_bits\n\nUserspace can restore an ITS Device Table Entry whose Size field encodes\nmore EventID bits than the virtual ITS supports.  The live MAPD path\nrejects that state, but vgic_its_restore_dte() accepts it and stores the\nout-of-range value in dev->num_eventid_bits.\n\nReject restored DTEs with num_eventid_bits > VITS_TYPER_IDBITS before\nallocating the device.  This mirrors the MAPD check and prevents the\nrestored state from reaching vgic_its_restore_itt(), where the unchecked\nvalue can be converted into an oversized scan_its_table() range."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"1716b7fea2ead941a0dfac06c4504a3437cdf00d","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"dab9f93251b2c86a033de6098d0c73afddd55d4a","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"b94538186a3eae3763b8f96dacd610920a865aa7","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"0680f511926589206f81f57f76ce131d7741a316","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"8bcd15b690a390241179516af1b6ae49ebfd9d95","versionType":"git"},{"version":"57a9a117154c93539e33161dd318e6aeb8c04efa","status":"affected","lessThan":"9ce754ed8e7ab4e3999767ce1505f85c449ccb07","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["arch/arm64/kvm/vgic/vgic-its.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.12","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.12","versionType":"semver"},{"version":"6.1.175","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.142","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.92","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.34","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.11","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/arm64/kvm/vgic/vgic-its.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/1716b7fea2ead941a0dfac06c4504a3437cdf00d"},{"url":"https://git.kernel.org/stable/c/dab9f93251b2c86a033de6098d0c73afddd55d4a"},{"url":"https://git.kernel.org/stable/c/b94538186a3eae3763b8f96dacd610920a865aa7"},{"url":"https://git.kernel.org/stable/c/0680f511926589206f81f57f76ce131d7741a316"},{"url":"https://git.kernel.org/stable/c/8bcd15b690a390241179516af1b6ae49ebfd9d95"},{"url":"https://git.kernel.org/stable/c/9ce754ed8e7ab4e3999767ce1505f85c449ccb07"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:H","baseScore":9,"baseSeverity":"CRITICAL"},"scenarios":[{"lang":"en","value":"AV:L - The bug is reached only through the KVM device ioctl path (KVM_SET_DEVICE_ATTR with KVM_DEV_ARM_ITS_RESTORE_TABLES), which requires a local process with access to a VM file descriptor; it is not triggered by network packets or guest MMIO/ITS commands.\nAC:L - An attacker can reliably plant a crafted Device Table Entry in guest RAM (Size field encoding 17–32 EventID bits) and have it processed during migration/snapshot restore; no race or attacker-uncontrollable memory layout is required, and the live MAPD path already proves the invalid state is straightforward to supply.\nPR:N - The highest-impact scenario is a malicious cloud VM tenant who needs no host privileges: they write a malformed DTE directly into guest physical memory (bypassing MAPD validation) and trigger host-side restore during automated live migration or snapshot resume, without requiring /dev/kvm or root on the host.\nUI:N - Exploitation does not require victim interaction beyond normal hypervisor operations such as automated live migration or snapshot restore that the attacker can initiate as a VM tenant; no end-user action like opening a file is needed.\nS:C - The vulnerability crosses the VM security boundary because guest-controlled saved state causes the host kernel to perform an oversized ITS table scan and mass kernel allocations, impacting host availability outside the guest's security scope.\nC:H - The unchecked num_eventid_bits value inflates scan_its_table()'s range up to BIT_ULL(32)*8 bytes (and can wrap the int size parameter for values 28–31), causing the host kernel to read far beyond the valid ITT bounds through kvm_read_guest_lock across a large guest GPA span.\nI:N - The flaw causes excessive guest-memory reads and kernel object allocation but does not corrupt or write host kernel memory; there is no demonstrated arbitrary host write, use-after-free, or code-execution primitive from this bug alone.\nA:H - The oversized scan can loop for an enormous number of kvm_read_guest_lock iterations (worse when the truncated int size wraps to a huge unsigned length), and valid-looking restored ITEs can drive unbounded vgic_add_lpi/kzalloc allocations, exhausting host CPU and memory and causing severe denial of service."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T12:39:16.848Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.12","versionEndExcluding":"6.1.175"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.12","versionEndExcluding":"6.6.142"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.12","versionEndExcluding":"6.12.92"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.12","versionEndExcluding":"6.18.34"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.12","versionEndExcluding":"7.0.11"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.12","versionEndExcluding":"7.1"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2026-64106","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2026-10-16T15:36:21.559565Z"}}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-20","lang":"en","type":"CWE","description":"CWE-20 Improper Input Validation"}]}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-19T20:28:12.062Z"}}]}}}