On Wed, Nov 27, 2024 at 3:39 PM Jiri Denemark <[email protected]> wrote:

> virCPUCompareUnusable can be called with blockers == NULL in case the
> CPU model itself is usable (i.e., QEMU reports an empty list of
> blockers), but the CPU definition contains some additional features
> which have to be checked.
>
> Fixes: v10.8.0-129-g5f8abbb7d0
> Reported-by: Han Han <[email protected]>
> Signed-off-by: Jiri Denemark <[email protected]>
> ---
>  src/cpu/cpu.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> Patch it to v10.10.0-rc1-1-g444f45135a and test as the following:
➜  ~ virsh capabilities --xpath //cpu > /tmp/cpu.xml
➜  ~ virsh hypervisor-cpu-compare /tmp/cpu.xml

The CPU provided by hypervisor on the host is a superset of CPU described
in /tmp/cpu.xml

No segment fault. It works.

> diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
> index 2b0d641e78..58fba3781c 100644
> --- a/src/cpu/cpu.c
> +++ b/src/cpu/cpu.c
> @@ -201,11 +201,13 @@ virCPUCompareUnusable(virArch arch,
>      char **blocker;
>      size_t i;
>
> -    for (blocker = blockers; *blocker; blocker++) {
> -        if (!(feat = virCPUDefFindFeature(cpu, *blocker)) ||
> -            feat->policy != VIR_CPU_FEATURE_DISABLE) {
> -            virBufferAddStr(&features, *blocker);
> -            virBufferAddLit(&features, ", ");
> +    if (blockers) {
> +        for (blocker = blockers; *blocker; blocker++) {
> +            if (!(feat = virCPUDefFindFeature(cpu, *blocker)) ||
> +                feat->policy != VIR_CPU_FEATURE_DISABLE) {
> +                virBufferAddStr(&features, *blocker);
> +                virBufferAddLit(&features, ", ");
> +            }
>          }
>      }
>
> --
> 2.47.0
>
>

-- 
Tested-by: Han Han <[email protected]>

Reply via email to