[libvirt] [PATCH 2/2] hotplug: fix char device detach

John Ferlan jferlan at redhat.com
Fri Oct 31 17:16:27 UTC 2014



On 10/31/2014 12:45 PM, Pavel Hrdina wrote:
> Hotplugging and hotunplugging char devices is only supported through
> '-device' and the check for device capability should be independently.
> 
> Coverity also complains about 'tmpChr->info.alias' could be NULL and we
> are dereferencing it but it somehow only in this case don't recognize
> that the value is set by 'qemuAssignDeviceChrAlias' so it's clearly
> false positive. Add comment to skip this error in this case.
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  src/qemu/qemu_hotplug.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index d3bf392..520c0db 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -3713,18 +3713,22 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
>          return ret;
>      }
>  
> -    if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) &&
> -        !tmpChr->info.alias) {
> -        if (qemuAssignDeviceChrAlias(vmdef, tmpChr, -1) < 0)
> -            return ret;
> +    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) {
> +        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> +                       _("qemu does not support -device"));
> +        return ret;
>      }

Doh!  I should have looked at the Attach code which has this check first
and done the same thing. Instead I was following the model of other
patches in my series.

You can choose to leave it there or hoist it as first check, too

>  
> +    if (!tmpChr->info.alias && qemuAssignDeviceChrAlias(vmdef, tmpChr, -1) < 0)
> +        return ret;
> +

Add 'sa_assert(tmpChr->info.alias);' see [1]

>      if (qemuBuildChrDeviceStr(&devstr, vm->def, chr, priv->qemuCaps) < 0)
>          return ret;
>  
>      qemuDomainMarkDeviceForRemoval(vm, &tmpChr->info);
>  
>      qemuDomainObjEnterMonitor(driver, vm);
> +    /* coverity[var_deref_model] */

[1] This could be too generic...

By adding the sa_assert() above which only gets executed under Coverity
you avoid the need for this

ACK with those changes

John

>      if (devstr && qemuMonitorDelDevice(priv->mon, tmpChr->info.alias) < 0) {
>          qemuDomainObjExitMonitor(driver, vm);
>          goto cleanup;
> 




More information about the libvir-list mailing list