mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
virtio-devices: mem: Handle descriptor parse errors gracefully
A malformed descriptor chain — wrong read/write flags, missing descriptors, or undersized buffers — caused Request::parse to return an error that killed the device thread. Log a warning, report the chain as used with zero length, and continue processing. Signed-off-by: Rob Bradford <rbradford@meta.com> Assisted-by: Claude:claude-opus-4-6
This commit is contained in:
@@ -631,7 +631,17 @@ impl MemEpollHandler {
|
||||
let mut used_descs = false;
|
||||
|
||||
while let Some(mut desc_chain) = self.queue.pop_descriptor_chain(self.mem.memory()) {
|
||||
let r = Request::parse(&mut desc_chain)?;
|
||||
let r = match Request::parse(&mut desc_chain) {
|
||||
Ok(r) => r,
|
||||
Err(e) => {
|
||||
warn!("Failed to parse virtio-mem request: {e}");
|
||||
self.queue
|
||||
.add_used(desc_chain.memory(), desc_chain.head_index(), 0)
|
||||
.map_err(Error::QueueAddUsed)?;
|
||||
used_descs = true;
|
||||
continue;
|
||||
}
|
||||
};
|
||||
let (resp_type, resp_state) = match r.req.req_type {
|
||||
VIRTIO_MEM_REQ_PLUG => (
|
||||
self.state_change_request(r.req.addr, r.req.nb_blocks, true),
|
||||
|
||||
Reference in New Issue
Block a user