The Zephyr virtio driver does not validate the descriptor-chain head id that the virtio device writes into the used ring. In virtioisr() (drivers/virtio/virtiocommon.c), the device-written vq->used->ring[idx].id is used directly as an index into vq->recvcbs[] and vq->desc[], which are both allocated with exactly vq->num entries. recvcbs[] holds {cb, opaque} callback entries, and the indexed callback pointer is then invoked as cbe.cb(cbe.opaque, used_len).
Because the id is consumed as a 16-bit value with no bound check, a malicious or compromised virtio backend (an untrusted hypervisor, or an untrusted hardware/peer-processor virtio device on a PCI or MMIO transport) can supply an id far beyond vq->num. This causes an out-of-bounds read of a {function pointer, argument} pair from heap memory beyond recv_cbs[], after which the driver calls that attacker-shaped pointer in the guest's interrupt context. No guest privileges or user interaction are required; the backend triggers it by writing the shared used ring and raising the queue interrupt.
The result is an arbitrary / attacker-influenced function-pointer call in the Zephyr guest, i.e. a control-flow-hijack primitive that can lead to code execution or, at minimum, a reliable crash. The fix rejects any used-ring id >= vq->num before indexing recvcbs[]/desc[] or invoking the callback. This affects builds using CONFIGVIRTIO with the PCI or MMIO transport.
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/13xxx/CVE-2026-13212.json",
"cwe_ids": [
"CWE-129"
],
"cna_assigner": "zephyr"
}[
{
"id": "CVE-2026-13212-b4f048f6",
"target": {
"function": "virtio_isr",
"file": "drivers/virtio/virtio_common.c"
},
"deprecated": false,
"digest": {
"function_hash": "247618580050569297850761724343547247445",
"length": 991.0
},
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/fe47dbca080957c425383cc1d5bdc7d48a41d4a5",
"signature_type": "Function"
},
{
"id": "CVE-2026-13212-fedf52c3",
"target": {
"file": "drivers/virtio/virtio_common.c"
},
"deprecated": false,
"digest": {
"threshold": 0.9,
"line_hashes": [
"282832166768715638979834972212120771130",
"220717408574754165600167664114975143109",
"179482412892757721379271047904099491242"
]
},
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/fe47dbca080957c425383cc1d5bdc7d48a41d4a5",
"signature_type": "Line"
}
]
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-13212.json"
"2026-08-28T14:33:01Z"