From 0d2acd505d9d190cc732a4d0979631cd62c678ab Mon Sep 17 00:00:00 2001 From: Liu Jiang Date: Sun, 19 Dec 2021 12:47:47 +0800 Subject: [PATCH] vhost-user: fix SlaveReqHandler::set_config() Fix a bug in SlaveReqHandler::set_config(), it should remove the message header of the buffer passed to backend. Signed-off-by: Liu Jiang --- coverage_config_x86_64.json | 2 +- src/vhost_user/dummy_slave.rs | 5 +++++ src/vhost_user/mod.rs | 4 ++-- src/vhost_user/slave_req_handler.rs | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/coverage_config_x86_64.json b/coverage_config_x86_64.json index d90e85d..e1314df 100644 --- a/coverage_config_x86_64.json +++ b/coverage_config_x86_64.json @@ -1 +1 @@ -{"coverage_score": 80.2, "exclude_path": "src/vhost_kern/", "crate_features": "vhost-user-master,vhost-user-slave"} +{"coverage_score": 80.3, "exclude_path": "src/vhost_kern/", "crate_features": "vhost-user-master,vhost-user-slave"} diff --git a/src/vhost_user/dummy_slave.rs b/src/vhost_user/dummy_slave.rs index cc9a9fb..222a5bb 100644 --- a/src/vhost_user/dummy_slave.rs +++ b/src/vhost_user/dummy_slave.rs @@ -218,6 +218,8 @@ impl VhostUserSlaveReqHandlerMut for DummySlaveReqHandler { { return Err(Error::InvalidParam); } + assert_eq!(offset, 0x100); + assert_eq!(size, 4); Ok(vec![0xa5; size as usize]) } @@ -231,6 +233,9 @@ impl VhostUserSlaveReqHandlerMut for DummySlaveReqHandler { { return Err(Error::InvalidParam); } + assert_eq!(offset, 0x100); + assert_eq!(buf.len(), 4); + assert_eq!(buf, &[0xa5; 4]); Ok(()) } diff --git a/src/vhost_user/mod.rs b/src/vhost_user/mod.rs index 605c4fc..a49cdfb 100644 --- a/src/vhost_user/mod.rs +++ b/src/vhost_user/mod.rs @@ -419,7 +419,7 @@ mod tests { master.set_mem_table(&mem).unwrap(); master - .set_config(0x100, VhostUserConfigFlags::WRITABLE, &[0xa5u8]) + .set_config(0x100, VhostUserConfigFlags::WRITABLE, &[0xa5u8; 4]) .unwrap(); let buf = [0x0u8; 4]; let (reply_body, reply_payload) = master @@ -427,7 +427,7 @@ mod tests { .unwrap(); let offset = reply_body.offset; assert_eq!(offset, 0x100); - assert_eq!(reply_payload[0], 0xa5); + assert_eq!(&reply_payload, &[0xa5; 4]); master.set_slave_request_fd(&eventfd).unwrap(); master.set_vring_enable(0, true).unwrap(); diff --git a/src/vhost_user/slave_req_handler.rs b/src/vhost_user/slave_req_handler.rs index bbc935e..2cd9dd9 100644 --- a/src/vhost_user/slave_req_handler.rs +++ b/src/vhost_user/slave_req_handler.rs @@ -634,7 +634,8 @@ impl SlaveReqHandler { None => return Err(Error::InvalidMessage), } - self.backend.set_config(msg.offset, buf, flags) + self.backend + .set_config(msg.offset, &buf[mem::size_of::()..], flags) } fn set_slave_req_fd(&mut self, files: Option>) -> Result<()> {