{"id":11405,"date":"2026-09-04T18:53:13","date_gmt":"2026-09-04T10:53:13","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-13212"},"modified":"2026-09-04T18:53:13","modified_gmt":"2026-09-04T10:53:13","slug":"cve-2026-13212","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-13212","title":{"rendered":"CVE-2026-13212 [HIGH] &#8211; The Zephyr virtio driver does not validate the descriptor-chain head id that the virtio de"},"content":{"rendered":"<p>The Zephyr virtio driver does not validate the descriptor-chain head id that the virtio device writes into the used ring. In virtio_isr() (drivers\/virtio\/virtio_common.c), the device-written vq-&gt;used-&gt;ring[idx].id is used directly as an index into vq-&gt;recv_cbs[] and vq-&gt;desc[], which are both allocated with exactly vq-&gt;num entries. recv_cbs[] holds {cb, opaque} callback entries, and the indexed callback pointer is then invoked as cbe.cb(cbe.opaque, used_len).<\/p>\n<p>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-&gt;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&#8217;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.<\/p>\n<p>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 &gt;= vq-&gt;num before indexing recv_cbs[]\/desc[] or invoking the callback. This affects builds using CONFIG_VIRTIO with the PCI or MMIO transport.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Zephyr virtio driver does not validate the descriptor-chain head id that the virtio device writes into the used ring. In virtio_isr() (drivers\/virtio\/virtio_common.c), the device-written vq-&gt;used-<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-11405","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/11405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}