mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
vmm: limit VSOCK CIDs to 32 bits
The VIRTIO specification[1] says: > The upper 32 bits of the CID are reserved and zeroed. We should therefore not allow the user to supply a VSOCK CID with those bits set. To accomplish this, limit the public API of the virtio-vsock device to only accept 32-bit CIDs, while still using 64-bit CIDs internally since that's how virtio-vsock works. [1]: https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-4400004 Signed-off-by: Alyssa Ross <hi@alyssa.is>
This commit is contained in:
committed by
Rob Bradford
parent
7d0b85d727
commit
451d3fb2f0
@@ -156,7 +156,7 @@ pub enum ValidationError {
|
||||
/// Need shared memory for vfio-user
|
||||
UserDevicesRequireSharedMemory,
|
||||
/// VSOCK Context Identifier has a special meaning, unsuitable for a VM.
|
||||
VsockSpecialCid(u64),
|
||||
VsockSpecialCid(u32),
|
||||
/// Memory zone is reused across NUMA nodes
|
||||
MemoryZoneReused(String, u32, u32),
|
||||
/// Invalid number of PCI segments
|
||||
@@ -2199,7 +2199,7 @@ impl VmConfig {
|
||||
}
|
||||
|
||||
if let Some(vsock) = &self.vsock {
|
||||
if [u32::MAX as u64, 0, 1, 2].contains(&vsock.cid) {
|
||||
if [!0, 0, 1, 2].contains(&vsock.cid) {
|
||||
return Err(ValidationError::VsockSpecialCid(vsock.cid));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user