From 25e8e64a0136f335845bea1430e866c3c6dc1f8a Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Mon, 19 Jan 2026 08:02:29 -0800 Subject: [PATCH] vhost_user_block: Return subset of config space requested The spec says simply that that an empty payload should be returned on error. Be slightly more helpful by adding a warning. Signed-off-by: Rob Bradford --- vhost_user_block/src/lib.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/vhost_user_block/src/lib.rs b/vhost_user_block/src/lib.rs index 0e28377b6..456af40d9 100644 --- a/vhost_user_block/src/lib.rs +++ b/vhost_user_block/src/lib.rs @@ -21,7 +21,7 @@ use std::{convert, io, process, result}; use block::qcow::{self, ImageType, QcowFile}; use block::{Request, VirtioBlockConfig, build_serial}; use libc::EFD_NONBLOCK; -use log::{debug, error, info}; +use log::{debug, error, info, warn}; use option_parser::{OptionParser, OptionParserError, Toggle}; use thiserror::Error; use vhost::vhost_user::Listener; @@ -395,8 +395,18 @@ impl VhostUserBackendMut for VhostUserBlkBackend { } } - fn get_config(&self, _offset: u32, _size: u32) -> Vec { - self.config.as_slice().to_vec() + fn get_config(&self, offset: u32, size: u32) -> Vec { + let subset = self + .config + .as_slice() + .get(offset as usize..(offset + size) as usize); + + if let Some(subset) = subset { + subset.to_vec() + } else { + warn!("Invalid config offset {offset} or size {size}"); + vec![] + } } fn set_config(&mut self, offset: u32, data: &[u8]) -> result::Result<(), io::Error> {