From 3b0da2d895b17bb03b1a03225e7cb704c142e036 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Mon, 6 Apr 2020 16:24:46 +0100 Subject: [PATCH] vmm: vm: Validate configuration on API boot When performing an API boot validate the configuration. For now only some very basic validation is performed but in subsequent commits the validation will be extended. Signed-off-by: Rob Bradford --- vmm/src/vm.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index cef1a4c7b..6c36442d2 100755 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -25,7 +25,9 @@ extern crate vm_allocator; extern crate vm_memory; extern crate vm_virtio; -use crate::config::{DeviceConfig, DiskConfig, HotplugMethod, NetConfig, PmemConfig, VmConfig}; +use crate::config::{ + DeviceConfig, DiskConfig, HotplugMethod, NetConfig, PmemConfig, ValidationError, VmConfig, +}; use crate::cpu; use crate::device_manager::{get_win_size, Console, DeviceManager, DeviceManagerError}; use crate::memory_manager::{Error as MemoryManagerError, MemoryManager}; @@ -191,6 +193,9 @@ pub enum Error { /// Cannot convert source URL from Path into &str RestoreSourceUrlPathToStr, + + /// Failed to validate config + ConfigValidation(ValidationError), } pub type Result = result::Result; @@ -309,6 +314,12 @@ impl Vm { reset_evt: EventFd, vmm_path: PathBuf, ) -> Result { + config + .lock() + .unwrap() + .validate() + .map_err(Error::ConfigValidation)?; + let device_manager = DeviceManager::new( fd.clone(), config.clone(),