diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-05-27 02:29:30 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-05-27 02:29:30 +0000 |
commit | 7a9a5f0c5090bdd18493e5138f9028e0cfc441b0 (patch) | |
tree | 53ad77dc4c015ef252090faa499b7785676217d6 | |
parent | e0009eccba8a115de14bd7b1fc33504bbe1e6daa (diff) | |
parent | 81b093c96c42af57db05d1aa468c3f604889710a (diff) | |
download | vmm_vhost-7a9a5f0c5090bdd18493e5138f9028e0cfc441b0.tar.gz |
Merge "Upgrade rust/crates/vmm_vhost to eaca5d36a2701c99b354ab5bc0954a78dfc9ff4f" am: d752e1b24a am: 81b093c96c
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/vmm_vhost/+/1713408
Change-Id: I4b7c1331b9a1fbbe1aa92dac714ac7d0666c2326
-rw-r--r-- | METADATA | 12 | ||||
m--------- | rust-vmm-ci | 0 | ||||
-rw-r--r-- | src/lib.rs | 22 | ||||
-rw-r--r-- | src/vhost_user/master.rs | 12 | ||||
-rw-r--r-- | src/vhost_user/message.rs | 20 | ||||
-rw-r--r-- | src/vhost_user/slave_req_handler.rs | 4 |
6 files changed, 37 insertions, 33 deletions
@@ -1,7 +1,5 @@ name: "rust_vmm_vhost" -description: - "A pure rust library for vDPA, vhost and vhost-user." - +description: "A pure rust library for vDPA, vhost and vhost-user." third_party { url { type: HOMEPAGE @@ -11,7 +9,11 @@ third_party { type: GIT value: "https://chromium.googlesource.com/chromiumos/third_party/rust-vmm/vhost" } - version: "98298cb96972c20e05bffed58861456b48328d43" - last_upgrade_date { year: 2021 month: 4 day: 9 } + version: "eaca5d36a2701c99b354ab5bc0954a78dfc9ff4f" license_type: NOTICE + last_upgrade_date { + year: 2021 + month: 5 + day: 19 + } } diff --git a/rust-vmm-ci b/rust-vmm-ci -Subproject ebc701641fa57f78d03f3f5ecac617b7bf7470b +Subproject 24d66cdae63d4aa7f8de01b616c015b97604a11 @@ -85,11 +85,13 @@ impl std::fmt::Display for Error { Error::InvalidOperation => write!(f, "invalid vhost operations"), Error::InvalidGuestMemory => write!(f, "invalid guest memory object"), Error::InvalidGuestMemoryRegion => write!(f, "invalid guest memory region"), - Error::InvalidQueue => write!(f, "invalid virtque"), - Error::DescriptorTableAddress => write!(f, "invalid virtque descriptor talbe address"), - Error::UsedAddress => write!(f, "invalid virtque used talbe address"), - Error::AvailAddress => write!(f, "invalid virtque available table address"), - Error::LogAddress => write!(f, "invalid virtque log address"), + Error::InvalidQueue => write!(f, "invalid virtqueue"), + Error::DescriptorTableAddress => { + write!(f, "invalid virtqueue descriptor table address") + } + Error::UsedAddress => write!(f, "invalid virtqueue used table address"), + Error::AvailAddress => write!(f, "invalid virtqueue available table address"), + Error::LogAddress => write!(f, "invalid virtqueue log address"), Error::IOError(e) => write!(f, "IO error: {}", e), #[cfg(feature = "vhost-kern")] Error::VhostOpen(e) => write!(f, "failure in opening vhost file: {}", e), @@ -121,7 +123,7 @@ mod tests { fn test_error() { assert_eq!( format!("{}", Error::AvailAddress), - "invalid virtque available table address" + "invalid virtqueue available table address" ); assert_eq!( format!("{}", Error::InvalidOperation), @@ -135,18 +137,18 @@ mod tests { format!("{}", Error::InvalidGuestMemoryRegion), "invalid guest memory region" ); - assert_eq!(format!("{}", Error::InvalidQueue), "invalid virtque"); + assert_eq!(format!("{}", Error::InvalidQueue), "invalid virtqueue"); assert_eq!( format!("{}", Error::DescriptorTableAddress), - "invalid virtque descriptor talbe address" + "invalid virtqueue descriptor table address" ); assert_eq!( format!("{}", Error::UsedAddress), - "invalid virtque used talbe address" + "invalid virtqueue used table address" ); assert_eq!( format!("{}", Error::LogAddress), - "invalid virtque log address" + "invalid virtqueue log address" ); assert_eq!(format!("{:?}", Error::AvailAddress), "AvailAddress"); diff --git a/src/vhost_user/master.rs b/src/vhost_user/master.rs index cc79871..16f0e02 100644 --- a/src/vhost_user/master.rs +++ b/src/vhost_user/master.rs @@ -879,10 +879,14 @@ mod tests { } master - .set_config(0x100, VhostUserConfigFlags::WRITABLE, &buf[0..4]) + .set_config(0, VhostUserConfigFlags::WRITABLE, &buf[0..4]) .unwrap(); master - .set_config(0x0, VhostUserConfigFlags::WRITABLE, &buf[0..4]) + .set_config( + VHOST_USER_CONFIG_SIZE, + VhostUserConfigFlags::WRITABLE, + &buf[0..4], + ) .unwrap_err(); master .set_config(0x1000, VhostUserConfigFlags::WRITABLE, &buf[0..4]) @@ -895,10 +899,10 @@ mod tests { ) .unwrap_err(); master - .set_config(0x100, VhostUserConfigFlags::WRITABLE, &buf) + .set_config(VHOST_USER_CONFIG_SIZE, VhostUserConfigFlags::WRITABLE, &buf) .unwrap_err(); master - .set_config(0x100, VhostUserConfigFlags::WRITABLE, &[]) + .set_config(VHOST_USER_CONFIG_SIZE, VhostUserConfigFlags::WRITABLE, &[]) .unwrap_err(); } diff --git a/src/vhost_user/message.rs b/src/vhost_user/message.rs index ea2df4e..32b2f8c 100644 --- a/src/vhost_user/message.rs +++ b/src/vhost_user/message.rs @@ -657,14 +657,13 @@ impl VhostUserConfig { impl VhostUserMsgValidator for VhostUserConfig { #[allow(clippy::if_same_then_else)] fn is_valid(&self) -> bool { + let end_addr = match self.size.checked_add(self.offset) { + Some(addr) => addr, + None => return false, + }; if (self.flags & !VhostUserConfigFlags::all().bits()) != 0 { return false; - } else if self.offset < 0x100 { - return false; - } else if self.size == 0 - || self.size > VHOST_USER_CONFIG_SIZE - || self.size + self.offset > VHOST_USER_CONFIG_SIZE - { + } else if self.size == 0 || end_addr > VHOST_USER_CONFIG_SIZE { return false; } true @@ -997,18 +996,15 @@ mod tests { #[test] fn check_user_config_msg() { - let mut msg = VhostUserConfig::new( - VHOST_USER_CONFIG_OFFSET, - VHOST_USER_CONFIG_SIZE - VHOST_USER_CONFIG_OFFSET, - VhostUserConfigFlags::WRITABLE, - ); + let mut msg = + VhostUserConfig::new(0, VHOST_USER_CONFIG_SIZE, VhostUserConfigFlags::WRITABLE); assert!(msg.is_valid()); msg.size = 0; assert!(!msg.is_valid()); msg.size = 1; assert!(msg.is_valid()); - msg.offset = 0; + msg.offset = u32::MAX; assert!(!msg.is_valid()); msg.offset = VHOST_USER_CONFIG_SIZE; assert!(!msg.is_valid()); diff --git a/src/vhost_user/slave_req_handler.rs b/src/vhost_user/slave_req_handler.rs index 18459a2..9d7ea10 100644 --- a/src/vhost_user/slave_req_handler.rs +++ b/src/vhost_user/slave_req_handler.rs @@ -400,8 +400,8 @@ impl<S: VhostUserSlaveReqHandler> SlaveReqHandler<S> { } MasterReq::SET_VRING_ENABLE => { let msg = self.extract_request_body::<VhostUserVringState>(&hdr, size, &buf)?; - if self.acked_protocol_features & VhostUserProtocolFeatures::MQ.bits() == 0 - && msg.index > 0 + if self.acked_virtio_features & VhostUserVirtioFeatures::PROTOCOL_FEATURES.bits() + == 0 { return Err(Error::InvalidOperation); } |