diff --git a/fuzz/common/src/vsock.rs b/fuzz/common/src/vsock.rs index 9d5e4883..02c601ff 100644 --- a/fuzz/common/src/vsock.rs +++ b/fuzz/common/src/vsock.rs @@ -337,7 +337,7 @@ mod tests { let mut chain = vq.build_multiple_desc_chains(&q_descriptors).unwrap(); let mut packet = - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); create_basic_vsock_packet_ops(&mut packet, &mem, &mut functions); let vsock_fuzz_input = VsockInput { functions, @@ -387,7 +387,7 @@ mod tests { let mut chain = vq.build_multiple_desc_chains(&q_descriptors).unwrap(); let mut packet = - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); let mut functions = Vec::new(); create_basic_vsock_packet_ops(&mut packet, &mem, &mut functions); let vsock_fuzz_input = VsockInput { diff --git a/fuzz/fuzz_targets/vsock.rs b/fuzz/fuzz_targets/vsock.rs index 519f7ab1..4b05cacf 100644 --- a/fuzz/fuzz_targets/vsock.rs +++ b/fuzz/fuzz_targets/vsock.rs @@ -28,10 +28,10 @@ fuzz_target!(|data: &[u8]| { if let Ok(mut chain) = vq.build_desc_chain(&descriptors) { let packet = match fuzz_input.init_function { InitFunction::FromRX => { - VsockPacket::from_rx_virtq_chain(&m, &mut chain, fuzz_input.pkt_max_data) + VsockPacket::<()>::from_rx_virtq_chain(&m, &mut chain, fuzz_input.pkt_max_data) } InitFunction::FromTX => { - VsockPacket::from_tx_virtq_chain(&m, &mut chain, fuzz_input.pkt_max_data) + VsockPacket::<()>::from_tx_virtq_chain(&m, &mut chain, fuzz_input.pkt_max_data) } }; if let Ok(mut p) = packet { diff --git a/virtio-queue/src/chain.rs b/virtio-queue/src/chain.rs index 993ddcde..0e8fdd55 100644 --- a/virtio-queue/src/chain.rs +++ b/virtio-queue/src/chain.rs @@ -14,8 +14,8 @@ use std::fmt::{self, Debug}; use std::mem::size_of; use std::ops::Deref; -use vm_memory::bitmap::{BitmapSlice, WithBitmapSlice}; -use vm_memory::{Address, Bytes, GuestAddress, GuestMemory, GuestMemoryRegion}; +use vm_memory::bitmap::MS; +use vm_memory::{Address, Bytes, GuestAddress, GuestMemory}; use crate::{desc::split::Descriptor, Error, Reader, Writer}; use virtio_bindings::bindings::virtio_ring::VRING_DESC_ALIGN_SIZE; @@ -90,21 +90,19 @@ where } /// Return a new instance of Writer - pub fn writer<'a, B: BitmapSlice>(self, mem: &'a M::Target) -> Result, Error> + pub fn writer(self, mem: &M::Target) -> Result>, Error> where M::Target: Sized, - <::R as GuestMemoryRegion>::B: WithBitmapSlice<'a, S = B>, { - Writer::new(mem, self).map_err(|_| Error::InvalidChain) + Writer::>::new(mem, self).map_err(|_| Error::InvalidChain) } /// Return a new instance of Reader - pub fn reader<'a, B: BitmapSlice>(self, mem: &'a M::Target) -> Result, Error> + pub fn reader(self, mem: &M::Target) -> Result>, Error> where M::Target: Sized, - <::R as GuestMemoryRegion>::B: WithBitmapSlice<'a, S = B>, { - Reader::new(mem, self).map_err(|_| Error::InvalidChain) + Reader::>::new(mem, self).map_err(|_| Error::InvalidChain) } /// Return an iterator that only yields the writable descriptors in the chain. diff --git a/virtio-queue/src/descriptor_utils.rs b/virtio-queue/src/descriptor_utils.rs index 8048141e..8df88cd5 100644 --- a/virtio-queue/src/descriptor_utils.rs +++ b/virtio-queue/src/descriptor_utils.rs @@ -14,7 +14,7 @@ use std::ptr::copy_nonoverlapping; use std::{cmp, result}; use crate::{DescriptorChain, Error}; -use vm_memory::bitmap::{BitmapSlice, WithBitmapSlice}; +use vm_memory::bitmap::{BitmapSlice, MS}; use vm_memory::{ Address, ByteValued, GuestMemory, GuestMemoryRegion, MemoryRegionAddress, VolatileSlice, }; @@ -157,10 +157,9 @@ pub struct Reader<'a, B = ()> { impl<'a, B: BitmapSlice> Reader<'a, B> { /// Construct a new Reader wrapper over `desc_chain`. - pub fn new(mem: &'a M, desc_chain: DescriptorChain) -> Result> + pub fn new(mem: &'a M, desc_chain: DescriptorChain) -> Result>> where M: GuestMemory, - <::R as GuestMemoryRegion>::B: WithBitmapSlice<'a, S = B>, T: Deref, T::Target: GuestMemory + Sized, { @@ -186,7 +185,7 @@ impl<'a, B: BitmapSlice> Reader<'a, B> { .get_slice(MemoryRegionAddress(offset.raw_value()), desc.len() as usize) .map_err(Error::GuestMemoryError) }) - .collect::>>>()?; + .collect::>>()?; Ok(Reader { buffer: DescriptorChainConsumer { buffers, @@ -269,10 +268,9 @@ pub struct Writer<'a, B = ()> { impl<'a, B: BitmapSlice> Writer<'a, B> { /// Construct a new Writer wrapper over `desc_chain`. - pub fn new(mem: &'a M, desc_chain: DescriptorChain) -> Result> + pub fn new(mem: &'a M, desc_chain: DescriptorChain) -> Result>> where M: GuestMemory, - <::R as GuestMemoryRegion>::B: WithBitmapSlice<'a, S = B>, T: Deref, T::Target: GuestMemory + Sized, { @@ -298,7 +296,7 @@ impl<'a, B: BitmapSlice> Writer<'a, B> { .get_slice(MemoryRegionAddress(offset.raw_value()), desc.len() as usize) .map_err(Error::GuestMemoryError) }) - .collect::>>>()?; + .collect::>>()?; Ok(Writer { buffer: DescriptorChainConsumer { @@ -454,7 +452,7 @@ mod tests { let chain = queue.iter(&memory).unwrap().next().unwrap(); - assert!(Reader::new(&memory, chain).is_err()); + assert!(Reader::<()>::new(&memory, chain).is_err()); } #[test] @@ -476,7 +474,7 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain).expect("failed to create Reader"); assert_eq!(reader.available_bytes(), 106); assert_eq!(reader.bytes_read(), 0); @@ -516,7 +514,7 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut writer = Writer::new(&memory, chain).expect("failed to create Writer"); + let mut writer = Writer::<()>::new(&memory, chain).expect("failed to create Writer"); assert_eq!(writer.available_bytes(), 106); assert_eq!(writer.bytes_written(), 0); @@ -546,7 +544,7 @@ mod tests { let chain = create_descriptor_chain(&memory, GuestAddress(0x0), vec![(Writable, 8)], 0) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain).expect("failed to create Reader"); assert_eq!(reader.available_bytes(), 0); assert_eq!(reader.bytes_read(), 0); @@ -565,7 +563,7 @@ mod tests { let chain = create_descriptor_chain(&memory, GuestAddress(0x0), vec![(Readable, 8)], 0) .expect("create_descriptor_chain failed"); - let mut writer = Writer::new(&memory, chain).expect("failed to create Writer"); + let mut writer = Writer::<()>::new(&memory, chain).expect("failed to create Writer"); assert_eq!(writer.available_bytes(), 0); assert_eq!(writer.bytes_written(), 0); @@ -596,8 +594,9 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain.clone()).expect("failed to create Reader"); - let mut writer = Writer::new(&memory, chain).expect("failed to create Writer"); + let mut reader = + Reader::<()>::new(&memory, chain.clone()).expect("failed to create Reader"); + let mut writer = Writer::<()>::new(&memory, chain).expect("failed to create Writer"); assert_eq!(reader.bytes_read(), 0); assert_eq!(writer.bytes_written(), 0); @@ -639,7 +638,7 @@ mod tests { 123, ) .expect("create_descriptor_chain failed"); - let mut writer = Writer::new(&memory, chain_writer).expect("failed to create Writer"); + let mut writer = Writer::<()>::new(&memory, chain_writer).expect("failed to create Writer"); if let Err(e) = writer.write_obj(secret) { panic!("write_obj should not fail here: {:?}", e); } @@ -652,7 +651,7 @@ mod tests { 123, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain_reader).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain_reader).expect("failed to create Reader"); match reader.read_obj::() { Err(e) => panic!("read_obj should not fail here: {:?}", e), Ok(read_secret) => assert_eq!(read_secret, secret), @@ -674,7 +673,7 @@ mod tests { ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain).expect("failed to create Reader"); let mut buf = vec![0; 1024]; @@ -708,13 +707,15 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain.clone()).expect("failed to create Reader"); + let mut reader = + Reader::<()>::new(&memory, chain.clone()).expect("failed to create Reader"); let other = reader.split_at(32).expect("failed to split Reader"); assert_eq!(reader.available_bytes(), 32); assert_eq!(other.available_bytes(), 96); - let mut writer = Writer::new(&memory, chain.clone()).expect("failed to create Writer"); + let mut writer = + Writer::<()>::new(&memory, chain.clone()).expect("failed to create Writer"); let other = writer.split_at(64).expect("failed to split Writer"); assert_eq!(writer.available_bytes(), 64); assert_eq!(other.available_bytes(), 4); @@ -741,7 +742,7 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain).expect("failed to create Reader"); let other = reader.split_at(24).expect("failed to split Reader"); assert_eq!(reader.available_bytes(), 24); @@ -769,7 +770,7 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain).expect("failed to create Reader"); let other = reader.split_at(128).expect("failed to split Reader"); assert_eq!(reader.available_bytes(), 128); @@ -797,7 +798,7 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain).expect("failed to create Reader"); let other = reader.split_at(0).expect("failed to split Reader"); assert_eq!(reader.available_bytes(), 0); @@ -825,7 +826,7 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain).expect("failed to create Reader"); if reader.split_at(256).is_ok() { panic!("successfully split Reader with out of bounds offset"); @@ -846,7 +847,7 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut reader = Reader::new(&memory, chain).expect("failed to create Reader"); + let mut reader = Reader::<()>::new(&memory, chain).expect("failed to create Reader"); let mut buf = [0u8; 64]; assert_eq!( @@ -869,7 +870,7 @@ mod tests { 0, ) .expect("create_descriptor_chain failed"); - let mut writer = Writer::new(&memory, chain).expect("failed to create Writer"); + let mut writer = Writer::<()>::new(&memory, chain).expect("failed to create Writer"); let buf = [0xdeu8; 64]; assert_eq!( diff --git a/virtio-vsock/src/packet.rs b/virtio-vsock/src/packet.rs index 7be82ccc..def368bc 100644 --- a/virtio-vsock/src/packet.rs +++ b/virtio-vsock/src/packet.rs @@ -36,9 +36,9 @@ use std::fmt::{self, Display}; use std::ops::Deref; use virtio_queue::DescriptorChain; -use vm_memory::bitmap::{BitmapSlice, WithBitmapSlice}; +use vm_memory::bitmap::{BitmapSlice, MS}; use vm_memory::{ - Address, ByteValued, Bytes, GuestMemory, GuestMemoryError, GuestMemoryRegion, Le16, Le32, Le64, + Address, ByteValued, Bytes, GuestMemory, GuestMemoryError, Le16, Le32, Le64, VolatileMemoryError, VolatileSlice, }; @@ -217,7 +217,8 @@ impl<'a, B: BitmapSlice> VsockPacket<'a, B> { /// let mut queue = create_queue_with_chain(&mem); /// /// while let Some(mut head) = queue.pop_descriptor_chain(&mem) { - /// let mut pkt = VsockPacket::from_rx_virtq_chain(&mem, &mut head, MAX_PKT_BUF_SIZE).unwrap(); + /// let mut pkt = + /// VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut head, MAX_PKT_BUF_SIZE).unwrap(); /// pkt.set_header_from_raw(&[0u8; PKT_HEADER_SIZE]).unwrap(); /// } /// ``` @@ -397,7 +398,7 @@ impl<'a, B: BitmapSlice> VsockPacket<'a, B> { /// let mut queue = create_queue_with_chain(&mem); /// /// while let Some(mut head) = queue.pop_descriptor_chain(&mem) { - /// let pkt = match VsockPacket::from_tx_virtq_chain(&mem, &mut head, MAX_PKT_BUF_SIZE) { + /// let pkt = match VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut head, MAX_PKT_BUF_SIZE) { /// Ok(pkt) => pkt, /// Err(_e) => { /// // Do some error handling. @@ -419,10 +420,9 @@ impl<'a, B: BitmapSlice> VsockPacket<'a, B> { mem: &'a M, desc_chain: &mut DescriptorChain, max_data_size: u32, - ) -> Result + ) -> Result>> where M: GuestMemory, - <::R as GuestMemoryRegion>::B: WithBitmapSlice<'a, S = B>, T: Deref, T::Target: GuestMemory, { @@ -445,7 +445,7 @@ impl<'a, B: BitmapSlice> VsockPacket<'a, B> { .read_obj(chain_head.addr()) .map_err(Error::InvalidMemoryAccess)?; - let mut pkt = Self { + let mut pkt = VsockPacket { header_slice, header, data_slice: None, @@ -549,32 +549,33 @@ impl<'a, B: BitmapSlice> VsockPacket<'a, B> { /// let mut queue = create_queue_with_chain(&mem); /// /// while let Some(mut head) = queue.pop_descriptor_chain(&mem) { - /// let used_len = match VsockPacket::from_rx_virtq_chain(&mem, &mut head, MAX_PKT_BUF_SIZE) { - /// Ok(mut pkt) => { - /// // Make sure the header is zeroed out first. - /// pkt.header_slice() - /// .write(&[0u8; PKT_HEADER_SIZE], 0) - /// .unwrap(); - /// // Write data to the packet, using the setters. - /// pkt.set_src_cid(SRC_CID) - /// .set_dst_cid(DST_CID) - /// .set_src_port(SRC_PORT) - /// .set_dst_port(DST_PORT) - /// .set_type(TYPE_STREAM) - /// .set_buf_alloc(BUF_ALLOC) - /// .set_fwd_cnt(FWD_CNT); - /// // In this example, we are sending a RW packet. - /// pkt.data_slice() - /// .unwrap() - /// .write_slice(&[1u8; LEN as usize], 0); - /// pkt.set_op(OP_RW).set_len(LEN); - /// pkt.header_slice().len() as u32 + LEN - /// } - /// Err(_e) => { - /// // Do some error handling. - /// 0 - /// } - /// }; + /// let used_len = + /// match VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut head, MAX_PKT_BUF_SIZE) { + /// Ok(mut pkt) => { + /// // Make sure the header is zeroed out first. + /// pkt.header_slice() + /// .write(&[0u8; PKT_HEADER_SIZE], 0) + /// .unwrap(); + /// // Write data to the packet, using the setters. + /// pkt.set_src_cid(SRC_CID) + /// .set_dst_cid(DST_CID) + /// .set_src_port(SRC_PORT) + /// .set_dst_port(DST_PORT) + /// .set_type(TYPE_STREAM) + /// .set_buf_alloc(BUF_ALLOC) + /// .set_fwd_cnt(FWD_CNT); + /// // In this example, we are sending a RW packet. + /// pkt.data_slice() + /// .unwrap() + /// .write_slice(&[1u8; LEN as usize], 0); + /// pkt.set_op(OP_RW).set_len(LEN); + /// pkt.header_slice().len() as u32 + LEN + /// } + /// Err(_e) => { + /// // Do some error handling. + /// 0 + /// } + /// }; /// queue.add_used(&mem, head.head_index(), used_len); /// } /// ``` @@ -582,10 +583,9 @@ impl<'a, B: BitmapSlice> VsockPacket<'a, B> { mem: &'a M, desc_chain: &mut DescriptorChain, max_data_size: u32, - ) -> Result + ) -> Result>> where M: GuestMemory, - <::R as GuestMemoryRegion>::B: WithBitmapSlice<'a, S = B>, T: Deref, T::Target: GuestMemory, { @@ -634,7 +634,7 @@ impl<'a, B: BitmapSlice> VsockPacket<'a, B> { .map_err(Error::InvalidMemoryAccess)? }; - Ok(Self { + Ok(VsockPacket { header_slice, header: Default::default(), data_slice: Some(data_slice), @@ -745,7 +745,7 @@ mod tests { let queue = MockSplitQueue::new(&mem, 16); let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::UnexpectedReadOnlyDescriptor ); @@ -766,7 +766,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::DescriptorLengthTooSmall ); @@ -786,7 +786,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::DescriptorLengthTooLong ); @@ -801,7 +801,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::DescriptorChainTooShort ); @@ -816,7 +816,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::UnexpectedReadOnlyDescriptor ); @@ -841,7 +841,7 @@ mod tests { let queue = MockSplitQueue::new(&mem, 16); let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidMemoryAccess(GuestMemoryError::InvalidBackendAddress) ); @@ -862,7 +862,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidMemoryAccess(GuestMemoryError::InvalidGuestAddress(GuestAddress( 0x20_0000 ))) @@ -880,7 +880,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::UnexpectedReadOnlyDescriptor ); let v = vec![ @@ -900,7 +900,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidMemoryAccess(GuestMemoryError::InvalidBackendAddress) ); @@ -921,7 +921,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidMemoryAccess(GuestMemoryError::InvalidGuestAddress(GuestAddress( 0x20_0000 ))) @@ -944,7 +944,8 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); - let packet = VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + let packet = + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); assert_eq!(packet.header, PacketHeader::default()); let header = packet.header_slice(); assert_eq!( @@ -963,7 +964,7 @@ mod tests { // If we try to get a vsock packet again, it fails because we already consumed all the // descriptors from the chain. assert_eq!( - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::DescriptorChainTooShort ); @@ -977,7 +978,8 @@ mod tests { ))]; let mut chain = queue.build_desc_chain(&v).unwrap(); - let packet = VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + let packet = + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); assert_eq!(packet.header, PacketHeader::default()); let header = packet.header_slice(); assert_eq!( @@ -1014,7 +1016,7 @@ mod tests { let queue = MockSplitQueue::new(&mem, 16); let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::UnexpectedWriteOnlyDescriptor ); @@ -1030,7 +1032,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::DescriptorLengthTooSmall ); @@ -1057,7 +1059,8 @@ mod tests { }; mem.write_obj(header, GuestAddress(0x10_0000)).unwrap(); - let packet = VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + let packet = + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); assert_eq!(packet.header, header); let header_slice = packet.header_slice(); assert_eq!( @@ -1078,7 +1081,7 @@ mod tests { let queue = MockSplitQueue::new(&mem, 16); let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidMemoryAccess(GuestMemoryError::InvalidBackendAddress) ); @@ -1089,7 +1092,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidMemoryAccess(GuestMemoryError::InvalidGuestAddress(GuestAddress( 0x20_0000 ))) @@ -1116,7 +1119,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidHeaderLen(MAX_PKT_BUF_SIZE + 1) ); @@ -1140,7 +1143,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::DescriptorChainTooShort ); @@ -1151,7 +1154,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidMemoryAccess(GuestMemoryError::InvalidBackendAddress) ); @@ -1162,7 +1165,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::InvalidMemoryAccess(GuestMemoryError::InvalidGuestAddress(GuestAddress( 0x20_0000 ))) @@ -1180,7 +1183,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::UnexpectedWriteOnlyDescriptor ); @@ -1191,7 +1194,7 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::DescriptorLengthTooSmall ); @@ -1202,7 +1205,8 @@ mod tests { ]; let mut chain = queue.build_desc_chain(&v).unwrap(); - let packet = VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + let packet = + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); assert_eq!(packet.header, header); let header_slice = packet.header_slice(); assert_eq!( @@ -1223,7 +1227,7 @@ mod tests { // If we try to get a vsock packet again, it fails because we already consumed all the // descriptors from the chain. assert_eq!( - VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap_err(), Error::DescriptorChainTooShort ); @@ -1237,7 +1241,8 @@ mod tests { ))]; let mut chain = queue.build_desc_chain(&v).unwrap(); - let packet = VsockPacket::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + let packet = + VsockPacket::<()>::from_tx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); assert_eq!(packet.header, header); let header_slice = packet.header_slice(); assert_eq!( @@ -1280,7 +1285,7 @@ mod tests { let mut chain = queue.build_desc_chain(&v).unwrap(); let mut packet = - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); packet .set_src_cid(SRC_CID) .set_dst_cid(DST_CID) @@ -1414,7 +1419,7 @@ mod tests { let mut chain = queue.build_desc_chain(&v).unwrap(); let mut packet = - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); let header = PacketHeader { src_cid: SRC_CID.into(), @@ -1512,7 +1517,7 @@ mod tests { let mut chain = queue.build_desc_chain(&v).unwrap(); let mut packet = - VsockPacket::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); + VsockPacket::<()>::from_rx_virtq_chain(&mem, &mut chain, MAX_PKT_BUF_SIZE).unwrap(); // Set the `src_cid` of the header, but use an invalid offset for that. set_header_field!(packet, src_cid, INVALID_OFFSET, SRC_CID); }