[libvirt] [PATCH 1/2] qemuDomainAttachNetDevice: Don't overwrite error on rollback

John Ferlan jferlan at redhat.com
Fri Nov 11 12:19:47 UTC 2016



On 11/04/2016 08:28 AM, Michal Privoznik wrote:
> If there is an error hotpluging a net device (for whatever
> reason) a rollback operation is performed. However, whilst doing
> so various helper functions that are called report errors on
> their own. This results in the original error to be overwritten
> and thus misleading the user.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/qemu/qemu_hotplug.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index e06862c..34f2135 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -935,6 +935,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
>                            virDomainNetDefPtr net)
>  {
>      qemuDomainObjPrivatePtr priv = vm->privateData;
> +    virErrorPtr originalError = NULL;
>      char **tapfdName = NULL;
>      int *tapfd = NULL;
>      size_t tapfdSize = 0;
> @@ -1320,6 +1321,7 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
>      if (!virDomainObjIsActive(vm))
>          goto cleanup;
>  
> +    originalError = virSaveLastError();

Coverity has found that there's a couple places between here and the
virSetError/virFreeError below where we goto cleanup and thus would leak
originalError

John
>      if (vlan < 0) {
>          if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
>              char *netdev_name;
> @@ -1350,6 +1352,8 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
>          ignore_value(qemuDomainObjExitMonitor(driver, vm));
>          VIR_FREE(hostnet_name);
>      }
> +    virSetError(originalError);
> +    virFreeError(originalError);
>      goto cleanup;
>  }
>  
> 




More information about the libvir-list mailing list