diff options
Diffstat (limited to 'sys_util')
-rw-r--r-- | sys_util/src/file_traits.rs | 4 | ||||
-rw-r--r-- | sys_util/src/guest_memory.rs | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/sys_util/src/file_traits.rs b/sys_util/src/file_traits.rs index d35bc4f..f296d9b 100644 --- a/sys_util/src/file_traits.rs +++ b/sys_util/src/file_traits.rs @@ -111,7 +111,7 @@ pub trait FileReadWriteVolatile { } } -impl<'a, T: FileReadWriteVolatile> FileReadWriteVolatile for &'a mut T { +impl<'a, T: FileReadWriteVolatile + ?Sized> FileReadWriteVolatile for &'a mut T { fn read_volatile(&mut self, slice: VolatileSlice) -> Result<usize> { (**self).read_volatile(slice) } @@ -208,7 +208,7 @@ pub trait FileReadWriteAtVolatile { } } -impl<'a, T: FileReadWriteAtVolatile> FileReadWriteAtVolatile for &'a mut T { +impl<'a, T: FileReadWriteAtVolatile + ?Sized> FileReadWriteAtVolatile for &'a mut T { fn read_at_volatile(&mut self, slice: VolatileSlice, offset: u64) -> Result<usize> { (**self).read_at_volatile(slice, offset) } diff --git a/sys_util/src/guest_memory.rs b/sys_util/src/guest_memory.rs index ac7722e..1246a9c 100644 --- a/sys_util/src/guest_memory.rs +++ b/sys_util/src/guest_memory.rs @@ -18,6 +18,7 @@ use data_model::DataInit; #[derive(Debug)] pub enum Error { + DescriptorChainOverflow, InvalidGuestAddress(GuestAddress), MemoryAccess(GuestAddress, mmap::Error), MemoryMappingFailed(mmap::Error), @@ -28,6 +29,8 @@ pub enum Error { MemoryAddSealsFailed(errno::Error), ShortWrite { expected: usize, completed: usize }, ShortRead { expected: usize, completed: usize }, + SplitOutOfBounds(usize), + VolatileMemoryAccess(VolatileMemoryError), } pub type Result<T> = result::Result<T, Error>; @@ -38,6 +41,10 @@ impl Display for Error { use self::Error::*; match self { + DescriptorChainOverflow => write!( + f, + "the combined length of all the buffers in a DescriptorChain is too large" + ), InvalidGuestAddress(addr) => write!(f, "invalid guest address {}", addr), MemoryAccess(addr, e) => { write!(f, "invalid guest memory access at addr={}: {}", addr, e) @@ -64,6 +71,8 @@ impl Display for Error { "incomplete read of {} instead of {} bytes", completed, expected, ), + SplitOutOfBounds(off) => write!(f, "DescriptorChain split is out of bounds: {}", off), + VolatileMemoryAccess(e) => e.fmt(f), } } } |