[PATCH] virQEMUDriverGetDomainCapabilities: Validate machine type
Michal Prívozník
mprivozn at redhat.com
Thu Dec 22 11:42:57 UTC 2022
On 12/22/22 10:48, Michal Privoznik wrote:
> When calling virConnectGetDomainCapabilities() (exposed as virsh
> domcapabilities) users have option to specify whatever sub-set of
> { emulatorbin, arch, machine, virttype } they want. Then we have
> a logic (hidden in virQEMUCapsCacheLookupDefault()) that picks
> qemuCaps that satisfy values passed by user. And whatever was not
> specified is then set to the default value as specified by picked
> qemuCaps. For instance: if no machine type was provided but
> emulatorbin was, then the machine type is set to the default one
> as defined by the emulatorbin.
>
> Or, when just virttype was set then the remaining three values
> are set to their respective defaults. Except, we have a crasher
> in this case:
>
> # virsh domcapabilities --virttype hvf
> error: Disconnected from qemu:///system due to end of file
> error: failed to get emulator capabilities
> error: End of file while reading data: Input/output error
>
> This is because for 'hvf' virttype (at least my) QEMU does not
> have any machine type. Therefore, @machine is set to NULL and the
> rest of the code does not expect that.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> src/qemu/qemu_conf.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index ae5bbcd138..cbd339f594 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -1454,6 +1454,13 @@ virQEMUDriverGetDomainCapabilities(virQEMUDriver *driver,
> g_autoptr(virDomainCaps) domCaps = NULL;
> const char *path = virQEMUCapsGetBinary(qemuCaps);
>
> + if (!virQEMUCapsIsMachineSupported(qemuCaps, virttype, machine)) {
> + virReportError(VIR_ERR_INVALID_ARG,
> + _("the machine '%s' is not supported by emulator '%s'"),
> + NULLSTR(machine), path);
> + return NULL;
> + }
> +
> if (!(domCaps = virDomainCapsNew(path, machine, arch, virttype)))
> return NULL;
>
Self-NAK. We can do even better and validate the @arch and @virttype
too. V2 coming shortly.
Michal
More information about the libvir-list
mailing list