mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
block: fix status value size
As per VirtIO spec 1.2 section 5.2.6, the `status` field is a byte, not u32. cloud-hypervisor writes an `u32` to guest memory, which accidentally zeros out the following 3 bytes, and may corrupt guest OS internal state. Signed-off-by: Changyuan Lyu <changyuanl@google.com>
This commit is contained in:
@@ -164,8 +164,8 @@ pub enum ExecuteError {
|
||||
}
|
||||
|
||||
impl ExecuteError {
|
||||
pub fn status(&self) -> u32 {
|
||||
match *self {
|
||||
pub fn status(&self) -> u8 {
|
||||
let status = match *self {
|
||||
ExecuteError::BadRequest(_) => VIRTIO_BLK_S_IOERR,
|
||||
ExecuteError::Flush(_) => VIRTIO_BLK_S_IOERR,
|
||||
ExecuteError::Read(_) => VIRTIO_BLK_S_IOERR,
|
||||
@@ -180,7 +180,8 @@ impl ExecuteError {
|
||||
ExecuteError::AsyncWrite(_) => VIRTIO_BLK_S_IOERR,
|
||||
ExecuteError::AsyncFlush(_) => VIRTIO_BLK_S_IOERR,
|
||||
ExecuteError::TemporaryBufferAllocation(_) => VIRTIO_BLK_S_IOERR,
|
||||
}
|
||||
};
|
||||
status as u8
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user