mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
block: Reject write zeroes with unknown flags
The virtio spec v1.2 in 5.2.6.2 requires that the device MUST return VIRTIO_BLK_S_UNSUPP for write zeroes commands if any unknown flag is set. Add an early check that rejects requests with reserved flag bits set by returning VIRTIO_BLK_S_UNSUPP via the existing ExecuteError::Unsupported variant. Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
This commit is contained in:
committed by
Rob Bradford
parent
af1d69a9dd
commit
8ca5210603
@@ -691,7 +691,13 @@ impl Request {
|
||||
|
||||
let wz_sector = u64::from_le_bytes(wz_sector);
|
||||
let wz_num_sectors = u32::from_le_bytes(wz_num_sectors);
|
||||
|
||||
let wz_flags = u32::from_le_bytes(wz_flags);
|
||||
// Per virtio spec v1.2 reject write zeroes if any unknown flag is set.
|
||||
if (wz_flags & !VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP) != 0 {
|
||||
warn!("Unsupported flags {wz_flags:#x} in write zeroes request");
|
||||
return Err(ExecuteError::Unsupported(VIRTIO_BLK_T_WRITE_ZEROES));
|
||||
}
|
||||
|
||||
let wz_offset = wz_sector * SECTOR_SIZE;
|
||||
if wz_offset == 0 && disable_sector0_writes {
|
||||
|
||||
Reference in New Issue
Block a user