summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2021-05-27 02:29:30 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-05-27 02:29:30 +0000
commit7a9a5f0c5090bdd18493e5138f9028e0cfc441b0 (patch)
tree53ad77dc4c015ef252090faa499b7785676217d6
parente0009eccba8a115de14bd7b1fc33504bbe1e6daa (diff)
parent81b093c96c42af57db05d1aa468c3f604889710a (diff)
downloadvmm_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--METADATA12
m---------rust-vmm-ci0
-rw-r--r--src/lib.rs22
-rw-r--r--src/vhost_user/master.rs12
-rw-r--r--src/vhost_user/message.rs20
-rw-r--r--src/vhost_user/slave_req_handler.rs4
6 files changed, 37 insertions, 33 deletions
diff --git a/METADATA b/METADATA
index 7c39d6b..798081c 100644
--- a/METADATA
+++ b/METADATA
@@ -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
diff --git a/src/lib.rs b/src/lib.rs
index a755f4f..db1680a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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);
}