mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-08-22 16:01:15 +00:00
net_util: Error out if the virtio-net descriptor chain is malformed
Do not silently ignore descriptors that are not of the expected form for the RX and TX queues. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
9c8f291b60
commit
c7d1cfbd88
@ -69,6 +69,14 @@ impl TxVirtio {
|
|||||||
iov_len: desc.len() as libc::size_t,
|
iov_len: desc.len() as libc::size_t,
|
||||||
};
|
};
|
||||||
iovecs.push(iovec);
|
iovecs.push(iovec);
|
||||||
|
} else {
|
||||||
|
error!(
|
||||||
|
"Invalid descriptor chain: address = 0x{:x} length = {} write_only = {}",
|
||||||
|
desc.addr().0,
|
||||||
|
desc.len(),
|
||||||
|
desc.is_write_only()
|
||||||
|
);
|
||||||
|
return Err(NetQueuePairError::DescriptorChainInvalid);
|
||||||
}
|
}
|
||||||
next_desc = desc_chain.next();
|
next_desc = desc_chain.next();
|
||||||
}
|
}
|
||||||
@ -189,6 +197,14 @@ impl RxVirtio {
|
|||||||
iov_len: desc.len() as libc::size_t,
|
iov_len: desc.len() as libc::size_t,
|
||||||
};
|
};
|
||||||
iovecs.push(iovec);
|
iovecs.push(iovec);
|
||||||
|
} else {
|
||||||
|
error!(
|
||||||
|
"Invalid descriptor chain: address = 0x{:x} length = {} write_only = {}",
|
||||||
|
desc.addr().0,
|
||||||
|
desc.len(),
|
||||||
|
desc.is_write_only()
|
||||||
|
);
|
||||||
|
return Err(NetQueuePairError::DescriptorChainInvalid);
|
||||||
}
|
}
|
||||||
next_desc = desc_chain.next();
|
next_desc = desc_chain.next();
|
||||||
}
|
}
|
||||||
@ -282,6 +298,8 @@ pub enum NetQueuePairError {
|
|||||||
QueueIteratorFailed(virtio_queue::Error),
|
QueueIteratorFailed(virtio_queue::Error),
|
||||||
/// Descriptor chain is too short
|
/// Descriptor chain is too short
|
||||||
DescriptorChainTooShort,
|
DescriptorChainTooShort,
|
||||||
|
/// Descriptor chain does not contain valid descriptors
|
||||||
|
DescriptorChainInvalid,
|
||||||
/// Failed to determine if queue needed notification
|
/// Failed to determine if queue needed notification
|
||||||
QueueNeedsNotification(virtio_queue::Error),
|
QueueNeedsNotification(virtio_queue::Error),
|
||||||
/// Failed to enable notification on the queue
|
/// Failed to enable notification on the queue
|
||||||
|
Loading…
Reference in New Issue
Block a user