mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
vmm: move fw_cfg validation into PayloadConfig::validate()
Move FwCfgMissingKernel/Cmdline/Initramfs error variants from ValidationError into PayloadConfigError. Change FwCfgConfig::validate() to take &PayloadConfig instead of &VmConfig and return PayloadConfigError. Wire the call through PayloadConfig::validate() so both CLI and JSON API paths are covered. Signed-off-by: Keith Adler <kadler@cloudflare.com>
This commit is contained in:
committed by
Rob Bradford
parent
a10d9a3099
commit
e4e3375a8d
@@ -373,18 +373,6 @@ pub enum ValidationError {
|
||||
/// Invalid block device serial length
|
||||
#[error("Block device serial length ({0}) exceeds maximum allowed length ({1})")]
|
||||
InvalidSerialLength(usize, usize),
|
||||
#[cfg(feature = "fw_cfg")]
|
||||
/// FwCfg missing kernel
|
||||
#[error("Error --fw-cfg-config: missing --kernel")]
|
||||
FwCfgMissingKernel,
|
||||
#[cfg(feature = "fw_cfg")]
|
||||
/// FwCfg missing cmdline
|
||||
#[error("Error --fw-cfg-config: missing --cmdline")]
|
||||
FwCfgMissingCmdline,
|
||||
#[cfg(feature = "fw_cfg")]
|
||||
/// FwCfg missing initramfs
|
||||
#[error("Error --fw-cfg-config: missing --initramfs")]
|
||||
FwCfgMissingInitramfs,
|
||||
#[cfg(feature = "ivshmem")]
|
||||
/// Invalid Ivshmem input size
|
||||
#[error("Invalid ivshmem input size")]
|
||||
@@ -2038,14 +2026,13 @@ impl FwCfgConfig {
|
||||
items,
|
||||
})
|
||||
}
|
||||
pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> {
|
||||
let payload = vm_config.payload.as_ref().unwrap();
|
||||
pub fn validate(&self, payload: &PayloadConfig) -> std::result::Result<(), PayloadConfigError> {
|
||||
if self.kernel && payload.kernel.is_none() {
|
||||
return Err(ValidationError::FwCfgMissingKernel);
|
||||
return Err(PayloadConfigError::FwCfgMissingKernel);
|
||||
} else if self.cmdline && payload.cmdline.is_none() {
|
||||
return Err(ValidationError::FwCfgMissingCmdline);
|
||||
return Err(PayloadConfigError::FwCfgMissingCmdline);
|
||||
} else if self.initramfs && payload.initramfs.is_none() {
|
||||
return Err(ValidationError::FwCfgMissingInitramfs);
|
||||
return Err(PayloadConfigError::FwCfgMissingInitramfs);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -747,6 +747,18 @@ pub enum PayloadConfigError {
|
||||
/// Specifying a kernel or firmware is not supported when an igvm is provided.
|
||||
#[error("Specifying a kernel or firmware is not supported when an igvm is provided")]
|
||||
IgvmPlusOtherPayloads,
|
||||
#[cfg(feature = "fw_cfg")]
|
||||
/// FwCfg missing kernel
|
||||
#[error("Error --fw-cfg-config: missing --kernel")]
|
||||
FwCfgMissingKernel,
|
||||
#[cfg(feature = "fw_cfg")]
|
||||
/// FwCfg missing cmdline
|
||||
#[error("Error --fw-cfg-config: missing --cmdline")]
|
||||
FwCfgMissingCmdline,
|
||||
#[cfg(feature = "fw_cfg")]
|
||||
/// FwCfg missing initramfs
|
||||
#[error("Error --fw-cfg-config: missing --initramfs")]
|
||||
FwCfgMissingInitramfs,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
|
||||
@@ -872,6 +884,11 @@ impl PayloadConfig {
|
||||
(None, None) => Err(PayloadConfigError::MissingBootitem),
|
||||
}?;
|
||||
|
||||
#[cfg(feature = "fw_cfg")]
|
||||
if let Some(fw_cfg_config) = &self.fw_cfg_config {
|
||||
fw_cfg_config.validate(self)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user