[libvirt PATCH] qemu_firmware: don't error out for unknown firmware features

Peter Krempa pkrempa at redhat.com
Mon May 10 13:24:39 UTC 2021


On Mon, May 10, 2021 at 15:16:11 +0200, Pavel Hrdina wrote:
> When QEMU introduces new firmware features libvirt will fail until we
> list that feature in our code as well which doesn't sound right.
> 
> We should simply ignore the new feature until we add a proper support
> for it.
> 
> Reported-by: Laszlo Ersek <lersek at redhat.com>
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  src/qemu/qemu_firmware.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
> index 94e88ebe4b..e37a7edefa 100644
> --- a/src/qemu/qemu_firmware.c
> +++ b/src/qemu/qemu_firmware.c
> @@ -567,6 +567,7 @@ qemuFirmwareFeatureParse(const char *path,
>      virJSONValue *featuresJSON;
>      g_autoptr(qemuFirmwareFeature) features = NULL;

Not related to this patch, but a bug nevertheless. 'features' is an
array allocated by:

features = g_new0(qemuFirmwareFeature, nfeatures);

Using g_autoptr calls the proper destructor function only for the first
element!

The whole premise of declaring an autoptr function for an enum type
seems a bit flawed to me!

>      size_t nfeatures;
> +    size_t nparsed = 0;
>      size_t i;
>  
>      if (!(featuresJSON = virJSONValueObjectGetArray(doc, "features"))) {
> @@ -586,17 +587,16 @@ qemuFirmwareFeatureParse(const char *path,
>          int tmp;
>  
>          if ((tmp = qemuFirmwareFeatureTypeFromString(tmpStr)) <= 0) {
> -            virReportError(VIR_ERR_INTERNAL_ERROR,
> -                           _("unknown feature %s"),
> -                           tmpStr);
> -            return -1;
> +            VIR_DEBUG("unknown feature %s", tmpStr);
> +            continue;
>          }
>  
> -        features[i] = tmp;
> +        features[nparsed] = tmp;
> +        nparsed++;
>      }
>  
>      fw->features = g_steal_pointer(&features);
> -    fw->nfeatures = nfeatures;
> +    fw->nfeatures = nparsed;
>      return 0;
>  }

For this patch:

Reviewed-by: Peter Krempa <pkrempa at redhat.com>




More information about the libvir-list mailing list