From nobody Sun Feb 8 23:03:41 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.37 as permitted sender) client-ip=209.132.183.37; envelope-from=libvir-list-bounces@redhat.com; helo=mx5-phx2.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.37 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx5-phx2.redhat.com (mx5-phx2.redhat.com [209.132.183.37]) by mx.zohomail.com with SMTPS id 1487360609594549.912545638619; Fri, 17 Feb 2017 11:43:29 -0800 (PST) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx5-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1HJe5Ff009711; Fri, 17 Feb 2017 14:40:05 -0500 Received: from smtp.corp.redhat.com (int-mx16.intmail.prod.int.phx2.redhat.com [10.5.11.28]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v1HJdZuK012492 for ; Fri, 17 Feb 2017 14:39:35 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9D296B6FE4; Fri, 17 Feb 2017 19:39:35 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-126.phx2.redhat.com [10.3.116.126]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5E129BBA29 for ; Fri, 17 Feb 2017 19:39:35 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Fri, 17 Feb 2017 14:39:22 -0500 Message-Id: <20170217193930.14943-6-jferlan@redhat.com> In-Reply-To: <20170217193930.14943-1-jferlan@redhat.com> References: <20170217193930.14943-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.74 on 10.5.11.28 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 05/13] qemu: Refactor hotplug to introduce qemuDomain{Add|Del}TLSObjects X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Refactor the TLS object adding code to make two separate API's that will handle the add/remove of the "secret" and "tls-creds-x509" objects including the Enter/Exit monitor commands. Signed-off-by: John Ferlan --- src/qemu/qemu_hotplug.c | 169 ++++++++++++++++++++++++++++----------------= ---- src/qemu/qemu_hotplug.h | 13 ++++ 2 files changed, 111 insertions(+), 71 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 8d15eee..fb8a052 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1526,6 +1526,89 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr drive= r, } =20 =20 +void +qemuDomainDelTLSObjects(virQEMUDriverPtr driver, + virDomainObjPtr vm, + const char *secAlias, + const char *tlsAlias) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + virErrorPtr orig_err; + + /* Nothing to do if neither defined */ + if (!tlsAlias && !secAlias) + return; + + orig_err =3D virSaveLastError(); + + qemuDomainObjEnterMonitor(driver, vm); + if (tlsAlias) + ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias)); + if (secAlias) + ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); + } + ignore_value(qemuDomainObjExitMonitor(driver, vm)); +} + + +int +qemuDomainAddTLSObjects(virQEMUDriverPtr driver, + virDomainObjPtr vm, + const char *secAlias, + virJSONValuePtr *secProps, + const char *tlsAlias, + virJSONValuePtr *tlsProps) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + int rc; + bool secobjAdded =3D false; + bool tlsobjAdded =3D false; + virErrorPtr orig_err; + + /* Nothing to do if neither defined */ + if (!tlsAlias && !secAlias) + return 0; + + qemuDomainObjEnterMonitor(driver, vm); + + if (secAlias) { + rc =3D qemuMonitorAddObject(priv->mon, "secret", + secAlias, *secProps); + *secProps =3D NULL; /* qemuMonitorAddObject consumes */ + if (rc < 0) + goto exit_monitor; + secobjAdded =3D true; + } + + if (tlsAlias) { + rc =3D qemuMonitorAddObject(priv->mon, "tls-creds-x509", + tlsAlias, *tlsProps); + *tlsProps =3D NULL; /* qemuMonitorAddObject consumes */ + if (rc < 0) + goto exit_monitor; + tlsobjAdded =3D true; + } + + return qemuDomainObjExitMonitor(driver, vm); + + exit_monitor: + orig_err =3D virSaveLastError(); + if (tlsobjAdded) + ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias)); + if (secobjAdded) + ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); + } + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + return -1; +} + + static int qemuDomainGetChardevTLSObjects(virQEMUDriverConfigPtr cfg, qemuDomainObjPrivatePtr priv, @@ -1582,8 +1665,6 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn, char *charAlias =3D NULL; char *devstr =3D NULL; bool chardevAdded =3D false; - bool tlsobjAdded =3D false; - bool secobjAdded =3D false; virJSONValuePtr tlsProps =3D NULL; virJSONValuePtr secProps =3D NULL; char *tlsAlias =3D NULL; @@ -1619,25 +1700,11 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr co= nn, &secProps, &secAlias) < 0) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); - - if (secAlias) { - rc =3D qemuMonitorAddObject(priv->mon, "secret", - secAlias, secProps); - secProps =3D NULL; - if (rc < 0) - goto exit_monitor; - secobjAdded =3D true; - } + if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps, + tlsAlias, &tlsProps) < 0) + goto cleanup; =20 - if (tlsAlias) { - rc =3D qemuMonitorAddObject(priv->mon, "tls-creds-x509", - tlsAlias, tlsProps); - tlsProps =3D NULL; /* qemuMonitorAddObject consumes */ - if (rc < 0) - goto exit_monitor; - tlsobjAdded =3D true; - } + qemuDomainObjEnterMonitor(driver, vm); =20 if (qemuMonitorAttachCharDev(priv->mon, charAlias, @@ -1672,15 +1739,12 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr co= nn, /* detach associated chardev on error */ if (chardevAdded) ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias)); - if (tlsobjAdded) - ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias)); - if (secobjAdded) - ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); if (orig_err) { virSetError(orig_err); virFreeError(orig_err); } ignore_value(qemuDomainObjExitMonitor(driver, vm)); + qemuDomainDelTLSObjects(driver, vm, secAlias, tlsAlias); goto audit; } =20 @@ -1858,10 +1922,8 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, virDomainChrSourceDefPtr dev =3D chr->source; char *charAlias =3D NULL; bool chardevAttached =3D false; - bool tlsobjAdded =3D false; bool teardowncgroup =3D false; bool teardowndevice =3D false; - bool secobjAdded =3D false; virJSONValuePtr tlsProps =3D NULL; char *tlsAlias =3D NULL; virJSONValuePtr secProps =3D NULL; @@ -1908,24 +1970,11 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, &secProps, &secAlias) < 0) goto cleanup; =20 - qemuDomainObjEnterMonitor(driver, vm); - if (secAlias) { - rc =3D qemuMonitorAddObject(priv->mon, "secret", - secAlias, secProps); - secProps =3D NULL; - if (rc < 0) - goto exit_monitor; - secobjAdded =3D true; - } + if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps, + tlsAlias, &tlsProps) < 0) + goto cleanup; =20 - if (tlsAlias) { - rc =3D qemuMonitorAddObject(priv->mon, "tls-creds-x509", - tlsAlias, tlsProps); - tlsProps =3D NULL; /* qemuMonitorAddObject consumes */ - if (rc < 0) - goto exit_monitor; - tlsobjAdded =3D true; - } + qemuDomainObjEnterMonitor(driver, vm); =20 if (qemuMonitorAttachCharDev(priv->mon, charAlias, chr->source) < 0) goto exit_monitor; @@ -1966,16 +2015,13 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, /* detach associated chardev on error */ if (chardevAttached) qemuMonitorDetachCharDev(priv->mon, charAlias); - if (tlsobjAdded) - ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias)); - if (secobjAdded) - ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); if (orig_err) { virSetError(orig_err); virFreeError(orig_err); } =20 ignore_value(qemuDomainObjExitMonitor(driver, vm)); + qemuDomainDelTLSObjects(driver, vm, secAlias, tlsAlias); goto audit; } =20 @@ -2000,8 +2046,6 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, bool teardowndevice =3D false; bool chardevAdded =3D false; bool objAdded =3D false; - bool tlsobjAdded =3D false; - bool secobjAdded =3D false; virJSONValuePtr props =3D NULL; virJSONValuePtr tlsProps =3D NULL; virJSONValuePtr secProps =3D NULL; @@ -2076,27 +2120,13 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, charAlias, &tlsProps, &tlsAlias, &secProps, &secAlias) < 0) goto cleanup; - } - - qemuDomainObjEnterMonitor(driver, vm); =20 - if (secAlias) { - rv =3D qemuMonitorAddObject(priv->mon, "secret", - secAlias, secProps); - secProps =3D NULL; - if (rv < 0) - goto exit_monitor; - secobjAdded =3D true; + if (qemuDomainAddTLSObjects(driver, vm, secAlias, &secProps, + tlsAlias, &tlsProps) < 0) + goto cleanup; } =20 - if (tlsAlias) { - rv =3D qemuMonitorAddObject(priv->mon, "tls-creds-x509", - tlsAlias, tlsProps); - tlsProps =3D NULL; /* qemuMonitorAddObject consumes */ - if (rv < 0) - goto exit_monitor; - tlsobjAdded =3D true; - } + qemuDomainObjEnterMonitor(driver, vm); =20 if (rng->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && qemuMonitorAttachCharDev(priv->mon, charAlias, @@ -2152,10 +2182,6 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, ignore_value(qemuMonitorDelObject(priv->mon, objAlias)); if (rng->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && chardevAdded) ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias)); - if (tlsobjAdded) - ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias)); - if (secobjAdded) - ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); if (orig_err) { virSetError(orig_err); virFreeError(orig_err); @@ -2163,6 +2189,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, =20 if (qemuDomainObjExitMonitor(driver, vm) < 0) releaseaddr =3D false; + qemuDomainDelTLSObjects(driver, vm, secAlias, tlsAlias); goto audit; } =20 diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h index 13242ee..c4f33e0 100644 --- a/src/qemu/qemu_hotplug.h +++ b/src/qemu/qemu_hotplug.h @@ -33,6 +33,19 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driv= er, virDomainDiskDefPtr disk, virStorageSourcePtr newsrc, bool force); + +void qemuDomainDelTLSObjects(virQEMUDriverPtr driver, + virDomainObjPtr vm, + const char *secAlias, + const char *tlsAlias); + +int qemuDomainAddTLSObjects(virQEMUDriverPtr driver, + virDomainObjPtr vm, + const char *secAlias, + virJSONValuePtr *secProps, + const char *tlsAlias, + virJSONValuePtr *tlsProps); + int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainControllerDefPtr controller); --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list