[libvirt] [PATCH 2/2] qemu: always generate the same alias for tls-creds-x509 object

John Ferlan jferlan at redhat.com
Tue Oct 18 14:37:37 UTC 2016



On 10/18/2016 09:58 AM, Pavel Hrdina wrote:
> There was inconsistency between alias used to create tls-creds-x509
> object and alias used to link that object to chardev while hotpluging.
> 
> In XML we have for example alias "serial0", but on qemu command line we
> generate "charserial0".
> 
> The issue was that code, that creates QMP command to hotplug chardev
> devices uses only the second alias "charserial0" and that alias is also
> used to link the tls-creds-x509 object.

Which two objects used the same ID in hotplug?

tlsProps would use obj%s_tls0

and this changes it to be essentially objchar%s_tls0

Essentially I'm trying to figure out from the commit message prior to
this patch what was created incorrectly.

John

> 
> This patch unifies the aliases for tls-creds-x509 to be always generated
> from "charserial0".
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  src/qemu/qemu_command.c                                          | 4 ++--
>  src/qemu/qemu_hotplug.c                                          | 9 +++++++--
>  .../qemuxml2argv-serial-tcp-tlsx509-chardev-verify.args          | 4 ++--
>  .../qemuxml2argv-serial-tcp-tlsx509-chardev.args                 | 4 ++--
>  4 files changed, 13 insertions(+), 8 deletions(-)
> 



> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 74f65c0..8d87e69 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -4949,10 +4949,10 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
>              if (qemuBuildTLSx509CommandLine(cmd, cfg->chardevTLSx509certdir,
>                                              dev->data.tcp.listen,
>                                              cfg->chardevTLSx509verify,
> -                                            alias, qemuCaps) < 0)
> +                                            charAlias, qemuCaps) < 0)
>                  goto error;
>  
> -            if (!(objalias = qemuAliasTLSObjFromChardevAlias(alias)))
> +            if (!(objalias = qemuAliasTLSObjFromChardevAlias(charAlias)))
>                  goto error;
>              virBufferAsprintf(&buf, ",tls-creds=%s", objalias);
>              VIR_FREE(objalias);
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index c2ba935..e39bd8b 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -1738,7 +1738,7 @@ int qemuDomainAttachChrDevice(virQEMUDriverPtr driver,
>                                           &tlsProps) < 0)
>              goto cleanup;
>  
> -        if (!(tlsAlias = qemuAliasTLSObjFromChardevAlias(chr->info.alias)))
> +        if (!(tlsAlias = qemuAliasTLSObjFromChardevAlias(charAlias)))
>              goto cleanup;
>          dev->data.tcp.tlscreds = true;
>      }
> @@ -4387,6 +4387,7 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
>      virDomainChrDefPtr tmpChr;
>      char *objAlias = NULL;
>      char *devstr = NULL;
> +    char *charAlias = NULL;
>  
>      if (!(tmpChr = virDomainChrFind(vmdef, chr))) {
>          virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> @@ -4397,11 +4398,14 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
>      if (!tmpChr->info.alias && qemuAssignDeviceChrAlias(vmdef, tmpChr, -1) < 0)
>          goto cleanup;
>  
> +    if (virAsprintf(&charAlias, "char%s", tmpChr->info.alias) < 0)
> +        goto cleanup;
> +

This would seemingly need to go after the subsequent line...  Although I
think the subsequent line gets removed if use a qemu_alias.c helper.

>      sa_assert(tmpChr->info.alias);
>  
>      if (tmpChr->source.type == VIR_DOMAIN_CHR_TYPE_TCP &&
>          cfg->chardevTLS &&
> -        !(objAlias = qemuAliasTLSObjFromChardevAlias(tmpChr->info.alias)))
> +        !(objAlias = qemuAliasTLSObjFromChardevAlias(charAlias)))
>          goto cleanup;
>  
>      if (qemuBuildChrDeviceStr(&devstr, vmdef, chr, priv->qemuCaps) < 0)
> @@ -4427,6 +4431,7 @@ int qemuDomainDetachChrDevice(virQEMUDriverPtr driver,
>   cleanup:
>      qemuDomainResetDeviceRemoval(vm);
>      VIR_FREE(devstr);
> +    VIR_FREE(charAlias);
>      virObjectUnref(cfg);
>      return ret;
>  
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev-verify.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev-verify.args
> index f521e33..003d11d 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev-verify.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev-verify.args
> @@ -25,9 +25,9 @@ server,nowait \
>  -chardev udp,id=charserial0,host=127.0.0.1,port=2222,localaddr=127.0.0.1,\
>  localport=1111 \
>  -device isa-serial,chardev=charserial0,id=serial0 \
> --object tls-creds-x509,id=objserial1_tls0,dir=/etc/pki/libvirt-chardev,\
> +-object tls-creds-x509,id=objcharserial1_tls0,dir=/etc/pki/libvirt-chardev,\
>  endpoint=client,verify-peer=yes \
>  -chardev socket,id=charserial1,host=127.0.0.1,port=5555,\
> -tls-creds=objserial1_tls0 \
> +tls-creds=objcharserial1_tls0 \
>  -device isa-serial,chardev=charserial1,id=serial1 \
>  -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args
> index 4c8c23e..b456cce 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-tcp-tlsx509-chardev.args
> @@ -25,9 +25,9 @@ server,nowait \
>  -chardev udp,id=charserial0,host=127.0.0.1,port=2222,localaddr=127.0.0.1,\
>  localport=1111 \
>  -device isa-serial,chardev=charserial0,id=serial0 \
> --object tls-creds-x509,id=objserial1_tls0,dir=/etc/pki/libvirt-chardev,\
> +-object tls-creds-x509,id=objcharserial1_tls0,dir=/etc/pki/libvirt-chardev,\
>  endpoint=client,verify-peer=no \
>  -chardev socket,id=charserial1,host=127.0.0.1,port=5555,\
> -tls-creds=objserial1_tls0 \
> +tls-creds=objcharserial1_tls0 \
>  -device isa-serial,chardev=charserial1,id=serial1 \
>  -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
> 




More information about the libvir-list mailing list