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
|
/// Invalid block device serial length
|
||||||
#[error("Block device serial length ({0}) exceeds maximum allowed length ({1})")]
|
#[error("Block device serial length ({0}) exceeds maximum allowed length ({1})")]
|
||||||
InvalidSerialLength(usize, usize),
|
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")]
|
#[cfg(feature = "ivshmem")]
|
||||||
/// Invalid Ivshmem input size
|
/// Invalid Ivshmem input size
|
||||||
#[error("Invalid ivshmem input size")]
|
#[error("Invalid ivshmem input size")]
|
||||||
@@ -2038,14 +2026,13 @@ impl FwCfgConfig {
|
|||||||
items,
|
items,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> {
|
pub fn validate(&self, payload: &PayloadConfig) -> std::result::Result<(), PayloadConfigError> {
|
||||||
let payload = vm_config.payload.as_ref().unwrap();
|
|
||||||
if self.kernel && payload.kernel.is_none() {
|
if self.kernel && payload.kernel.is_none() {
|
||||||
return Err(ValidationError::FwCfgMissingKernel);
|
return Err(PayloadConfigError::FwCfgMissingKernel);
|
||||||
} else if self.cmdline && payload.cmdline.is_none() {
|
} else if self.cmdline && payload.cmdline.is_none() {
|
||||||
return Err(ValidationError::FwCfgMissingCmdline);
|
return Err(PayloadConfigError::FwCfgMissingCmdline);
|
||||||
} else if self.initramfs && payload.initramfs.is_none() {
|
} else if self.initramfs && payload.initramfs.is_none() {
|
||||||
return Err(ValidationError::FwCfgMissingInitramfs);
|
return Err(PayloadConfigError::FwCfgMissingInitramfs);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -747,6 +747,18 @@ pub enum PayloadConfigError {
|
|||||||
/// Specifying a kernel or firmware is not supported when an igvm is provided.
|
/// 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")]
|
#[error("Specifying a kernel or firmware is not supported when an igvm is provided")]
|
||||||
IgvmPlusOtherPayloads,
|
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)]
|
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
|
||||||
@@ -872,6 +884,11 @@ impl PayloadConfig {
|
|||||||
(None, None) => Err(PayloadConfigError::MissingBootitem),
|
(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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user