From nobody Sun May 5 15:17:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1521811729767779.939784475765; Fri, 23 Mar 2018 06:28:49 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 85C35C0587E4; Fri, 23 Mar 2018 13:28:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7BB4D7C8C5; Fri, 23 Mar 2018 13:28:46 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id A158F181BA03; Fri, 23 Mar 2018 13:28:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w2NDSg4i020081 for ; Fri, 23 Mar 2018 09:28:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id D18E52023234; Fri, 23 Mar 2018 13:28:42 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 78B9A2023233 for ; Fri, 23 Mar 2018 13:28:42 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Fri, 23 Mar 2018 14:28:39 +0100 Message-Id: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH] qemu: Build smartcard command line more wisely 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-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 23 Mar 2018 13:28:48 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" https://bugzilla.redhat.com/show_bug.cgi?id=3D1558317 Similarly to b133fac356324c3 we need to look up alias of CCID controller when constructing smartcard command line instead of relying on broken assumption it will always be 'ccid0'. After user aliases it can be anything. Signed-off-by: Michal Privoznik Reviewed-by: Andrea Bolognani --- src/qemu/qemu_command.c | 38 ++++++++++++++++++++++++++++= +++- tests/qemuxml2argvdata/user-aliases.args | 3 +++ tests/qemuxml2argvdata/user-aliases.xml | 11 +++++++++ tests/qemuxml2argvtest.c | 3 ++- 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a8afbd14fa..937a7d1b7b 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8701,6 +8701,32 @@ qemuBuildNetCommandLine(virQEMUDriverPtr driver, } =20 =20 +static const char * +qemuBuildSmartcardFindCCIDController(const virDomainDef *def, + const virDomainSmartcardDef *smartcar= d) +{ + size_t i; + + /* Should never happen. But doesn't hurt to check. */ + if (smartcard->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID) + return NULL; + + for (i =3D 0; i < def->ncontrollers; i++) { + const virDomainControllerDef *tmp =3D def->controllers[i]; + + if (tmp->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_CCID) + continue; + + if (tmp->idx !=3D smartcard->info.addr.ccid.controller) + continue; + + return tmp->info.alias; + } + + return NULL; +} + + static int qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, virCommandPtr cmd, @@ -8714,6 +8740,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logMan= ager, char *devstr; virBuffer opt =3D VIR_BUFFER_INITIALIZER; const char *database; + const char *contAlias =3D NULL; =20 if (!def->nsmartcards) return 0; @@ -8811,8 +8838,17 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logMa= nager, virBufferFreeAndReset(&opt); return -1; } + + if (!(contAlias =3D qemuBuildSmartcardFindCCIDController(def, + smartcard))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unable to find controller for %s"), + smartcard->info.alias); + return -1; + } + virCommandAddArg(cmd, "-device"); - virBufferAsprintf(&opt, ",id=3D%s,bus=3Dccid0.0", smartcard->info.alia= s); + virBufferAsprintf(&opt, ",id=3D%s,bus=3D%s.0", smartcard->info.alias, = contAlias); virCommandAddArgBuffer(cmd, &opt); =20 return 0; diff --git a/tests/qemuxml2argvdata/user-aliases.args b/tests/qemuxml2argvd= ata/user-aliases.args index 4c9c951cef..ad93947104 100644 --- a/tests/qemuxml2argvdata/user-aliases.args +++ b/tests/qemuxml2argvdata/user-aliases.args @@ -31,6 +31,8 @@ server,nowait \ -global PIIX4_PM.disable_s4=3D0 \ -boot cd \ -device virtio-serial-pci,id=3Dvirtio-serial0,bus=3Dpci.0,addr=3D0x8 \ +-device usb-ccid,id=3Dua-myCCID,bus=3Dua-SomeWeirdController.0,port=3D1 \ +-device usb-ccid,id=3Dua-myCCID2,bus=3Dua-SomeWeirdController.0,port=3D2 \ -usb \ -drive file=3D/var/lib/libvirt/images/fd.img,format=3Draw,if=3Dnone,\ id=3Ddrive-ua-myDisk1,cache=3Dnone \ @@ -55,6 +57,7 @@ bus=3Dpci.0,addr=3D0x9 \ -device rtl8139,vlan=3D2,id=3Dua-AndAlsoClientMode,mac=3D52:54:00:8c:b1:f8= ,bus=3Dpci.0,\ addr=3D0xa \ -net socket,connect=3D127.0.0.1:1234,vlan=3D2,name=3Dhostua-AndAlsoClientM= ode \ +-device ccid-card-emulated,backend=3Dnss-emulated,id=3Dsmartcard0,bus=3Dua= -myCCID.0 \ -chardev pty,id=3Dcharserial0 \ -device isa-serial,chardev=3Dcharserial0,id=3Dserial0 \ -chardev pty,id=3Dcharserial1 \ diff --git a/tests/qemuxml2argvdata/user-aliases.xml b/tests/qemuxml2argvda= ta/user-aliases.xml index 52132a82d7..9ce123b477 100644 --- a/tests/qemuxml2argvdata/user-aliases.xml +++ b/tests/qemuxml2argvdata/user-aliases.xml @@ -85,6 +85,14 @@
+ + +
+ + + +
+ @@ -109,6 +117,9 @@
+ +
+ diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 5ece3f0cc6..064fd3b767 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2995,7 +2995,8 @@ mymain(void) QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4, QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_ISA_SERIAL, - QEMU_CAPS_HDA_DUPLEX); + QEMU_CAPS_HDA_DUPLEX, + QEMU_CAPS_CCID_EMULATED); DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI= ); DO_TEST("user-aliases-usb", QEMU_CAPS_KVM, QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4, --=20 2.16.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list