{"record":{"id":"66d83d59ef0f4d2b","repo":"firecracker-microvm/firecracker","slug":"the-number-of-available-virtio-descriptors-report","errorCode":null,"errorMessage":"The number of available virtio descriptors {reported_len} is greater than queue size: {queue_size}!","messagePattern":"The number of available virtio descriptors (.+?) is greater than queue size: (.+?)!","errorType":"panic","errorClass":"InvalidAvailIdx","httpStatus":null,"severity":"error","filePath":"src/vmm/src/devices/mod.rs","lineNumber":30,"sourceCode":"pub mod acpi;\npub mod legacy;\npub mod pci;\npub mod pseudo;\npub mod virtio;\n\nuse crate::devices::virtio::net::metrics::NetDeviceMetrics;\nuse crate::devices::virtio::queue::{InvalidAvailIdx, QueueError};\nuse crate::devices::virtio::vsock::VsockError;\nuse crate::logger::{IncMetric, error};\nuse crate::vstate::interrupts::InterruptError;\n\n// Function used for reporting error in terms of logging\n// but also in terms of metrics of net event fails.\n// network metrics is reported per device so we need a handle to each net device's\n// metrics `net_iface_metrics` to report metrics for that device.\npub(crate) fn report_net_event_fail(net_iface_metrics: &NetDeviceMetrics, err: DeviceError) {\n    if let DeviceError::InvalidAvailIdx(err) = err {\n        panic!(\"{}\", err);\n    }\n    error!(\"{:?}\", err);\n    net_iface_metrics.event_fails.inc();\n}\n\n#[derive(Debug, thiserror::Error, displaydoc::Display)]\npub enum DeviceError {\n    /// Failed to read from the TAP device.\n    FailedReadTap,\n    /// Failed to signal irq: {0}\n    FailedSignalingIrq(#[from] InterruptError),\n    /// IO error: {0}\n    IoError(io::Error),\n    /// Device received malformed payload.\n    MalformedPayload,\n    /// Device received malformed descriptor.\n    MalformedDescriptor,\n    /// Error during queue processing: {0}","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/firecracker-microvm/firecracker/blob/81b38b9dad6056d7a48073e95ac5a9aed51cb2ab/src/vmm/src/devices/mod.rs#L12-L48","documentation":"Error \"The number of available virtio descriptors {reported_len} is greater than queue size: {queue_size}!\" thrown in firecracker-microvm/firecracker.","triggerScenarios":"Thrown at src/vmm/src/devices/mod.rs:32 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the guest virtio driver to not report more descriptors than the negotiated queue size.","Validate descriptor counts against the queue size before processing the virtqueue."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"81b38b9dad6056d7a48073e95ac5a9aed51cb2ab","analyzedAt":"2026-08-19T05:27:02.517Z","contentChangedAt":"2026-08-19T05:27:02.517Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}