From nobody Fri May 16 01:10:58 2025 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 1503488864824398.5337647618801; Wed, 23 Aug 2017 04:47:44 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D98764E4D3; Wed, 23 Aug 2017 11:47:42 +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 601167E68F; Wed, 23 Aug 2017 11:47:42 +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 5D2291806106; Wed, 23 Aug 2017 11:47:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v7NBlY6Y031854 for ; Wed, 23 Aug 2017 07:47:34 -0400 Received: by smtp.corp.redhat.com (Postfix) id E24897D542; Wed, 23 Aug 2017 11:47:34 +0000 (UTC) Received: from caroline.localdomain (unknown [10.43.2.67]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 90BBD7DB4F for ; Wed, 23 Aug 2017 11:47:32 +0000 (UTC) Received: from caroline.brq.redhat.com (caroline.brq.redhat.com [127.0.0.1]) by caroline.localdomain (Postfix) with ESMTP id 6C35B1206EC for ; Wed, 23 Aug 2017 13:47:31 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D98764E4D3 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Martin Kletzander To: libvir-list@redhat.com Date: Wed, 23 Aug 2017 13:47:26 +0200 Message-Id: <79eb68a037f217f4a83d3d4af05a0340addc96f9.1503488825.git.mkletzan@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/3] conf: Properly truncate wide character names in virDomainObjGetShortName 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 23 Aug 2017 11:47:43 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We always truncated the name at 20 bytes instead of characters. In case 20 bytes were in the middle of a multi-byte character, then the string became invalid and various parts of the code would error out (e.g. XML parsing of that string). Let's instead properly truncate it after 20 characters instead. In some cases the truncation didn't even work (as can be seen from the modified tests), which is fixed by this as well. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=3D1448766 Signed-off-by: Martin Kletzander --- src/conf/domain_conf.c | 30 ++++++++++++++++++= +--- .../qemuxml2argv-aarch64-virt-default-nic.args | 2 +- .../qemuxml2argv-hugepages-pages2.args | 4 +-- .../qemuxml2argv-hugepages-pages3.args | 5 ++-- .../qemuxml2argv-hugepages-pages5.args | 4 +-- .../qemuxml2argv-hugepages-pages6.args | 2 +- .../qemuxml2argv-pcie-expander-bus.args | 2 +- 7 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 47eba4dbb315..9a46ceece2d6 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -27131,6 +27131,8 @@ virDomainDefHasMemballoon(const virDomainDef *def) } =20 =20 +#define VIR_DOMAIN_SHORT_NAME_MAX 20 + /** * virDomainObjGetShortName: * @vm: Machine for which to get a name @@ -27141,15 +27143,37 @@ virDomainDefHasMemballoon(const virDomainDef *def) char * virDomainObjGetShortName(const virDomainDef *def) { - const int dommaxlen =3D 20; + wchar_t wshortname[VIR_DOMAIN_SHORT_NAME_MAX + 1] =3D {0}; + size_t len =3D 0; + char *shortname =3D NULL; char *ret =3D NULL; =20 - ignore_value(virAsprintf(&ret, "%d-%.*s", - def->id, dommaxlen, def->name)); + if (mbstowcs(wshortname, def->name, VIR_DOMAIN_SHORT_NAME_MAX) =3D=3D = (size_t) -1) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Cannot convert domain name to wide character str= ing")); + return NULL; + } + + len =3D wcstombs(NULL, wshortname, 0); + if (len =3D=3D (size_t) -1) + return NULL; =20 + if (VIR_ALLOC_N(shortname, len + 1) < 0) + return NULL; + + if (wcstombs(shortname, wshortname, len) =3D=3D (size_t) -1) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Cannot convert domain name from wide character s= tring")); + goto cleanup; + } + + ignore_value(virAsprintf(&ret, "%d-%s", def->id, def->name)); + cleanup: + VIR_FREE(shortname); return ret; } =20 +#undef VIR_DOMAIN_SHORT_NAME_MAX =20 int virDomainGetBlkioParametersAssignFromDef(virDomainDefPtr def, diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.a= rgs b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args index f27fe0a1d364..08930df8a218 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args @@ -16,7 +16,7 @@ QEMU_AUDIO_DRV=3Dnone \ -nodefconfig \ -nodefaults \ -chardev socket,id=3Dcharmonitor,\ -path=3D/tmp/lib/domain--1-aarch64-virt-default/monitor.sock,server,nowait \ +path=3D/tmp/lib/domain--1-aarch64-virt-default-nic/monitor.sock,server,now= ait \ -mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ -no-acpi \ -boot c \ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.args b/te= sts/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.args index 7ea277a7cd65..ab0eb7ff0ca3 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages2.args @@ -11,14 +11,14 @@ QEMU_AUDIO_DRV=3Dnone \ -m 1024 \ -smp 2,sockets=3D2,cores=3D1,threads=3D1 \ -mem-prealloc \ --mem-path /dev/hugepages2M/libvirt/qemu/-1-SomeDummyHugepagesGu \ +-mem-path /dev/hugepages2M/libvirt/qemu/-1-SomeDummyHugepagesGuest \ -numa node,nodeid=3D0,cpus=3D0,mem=3D256 \ -numa node,nodeid=3D1,cpus=3D1,mem=3D768 \ -uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \ -nographic \ -nodefaults \ -chardev socket,id=3Dcharmonitor,\ -path=3D/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \ +path=3D/tmp/lib/domain--1-SomeDummyHugepagesGuest/monitor.sock,server,nowa= it \ -mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ -no-acpi \ -boot c \ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.args b/te= sts/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.args index 2291d6d72e8a..4794a940b1b3 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages3.args @@ -13,13 +13,14 @@ QEMU_AUDIO_DRV=3Dnone \ -object memory-backend-ram,id=3Dram-node0,size=3D268435456 \ -numa node,nodeid=3D0,cpus=3D0,memdev=3Dram-node0 \ -object memory-backend-file,id=3Dram-node1,prealloc=3Dyes,\ -mem-path=3D/dev/hugepages1G/libvirt/qemu/-1-SomeDummyHugepagesGu,size=3D80= 5306368 \ +mem-path=3D/dev/hugepages1G/libvirt/qemu/-1-SomeDummyHugepagesGuest,\ +size=3D805306368 \ -numa node,nodeid=3D1,cpus=3D1,memdev=3Dram-node1 \ -uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \ -nographic \ -nodefaults \ -chardev socket,id=3Dcharmonitor,\ -path=3D/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \ +path=3D/tmp/lib/domain--1-SomeDummyHugepagesGuest/monitor.sock,server,nowa= it \ -mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ -no-acpi \ -boot c \ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages5.args b/te= sts/qemuxml2argvdata/qemuxml2argv-hugepages-pages5.args index c5bf7784ec23..124dd578f390 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages5.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages5.args @@ -10,13 +10,13 @@ QEMU_AUDIO_DRV=3Dnone \ -M pc \ -m 1024 \ -mem-prealloc \ --mem-path /dev/hugepages2M/libvirt/qemu/-1-SomeDummyHugepagesGu \ +-mem-path /dev/hugepages2M/libvirt/qemu/-1-SomeDummyHugepagesGuest \ -smp 2,sockets=3D2,cores=3D1,threads=3D1 \ -uuid ef1bdff4-27f3-4e85-a807-5fb4d58463cc \ -nographic \ -nodefaults \ -chardev socket,id=3Dcharmonitor,\ -path=3D/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \ +path=3D/tmp/lib/domain--1-SomeDummyHugepagesGuest/monitor.sock,server,nowa= it \ -mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ -no-acpi \ -boot c \ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args b/te= sts/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args index c1cc0017f335..31a17db44994 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-hugepages-pages6.args @@ -14,7 +14,7 @@ QEMU_AUDIO_DRV=3Dnone \ -nographic \ -nodefaults \ -chardev socket,id=3Dcharmonitor,\ -path=3D/tmp/lib/domain--1-SomeDummyHugepagesGu/monitor.sock,server,nowait \ +path=3D/tmp/lib/domain--1-SomeDummyHugepagesGuest/monitor.sock,server,nowa= it \ -mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ -no-acpi \ -boot c \ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.args b/t= ests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.args index 23852b45e56a..f42a69fc3fd1 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.args @@ -16,7 +16,7 @@ QEMU_AUDIO_DRV=3Dnone \ -nographic \ -nodefaults \ -chardev socket,id=3Dcharmonitor,\ -path=3D/tmp/lib/domain--1-pcie-expander-bus-te/monitor.sock,server,nowait \ +path=3D/tmp/lib/domain--1-pcie-expander-bus-test/monitor.sock,server,nowai= t \ -mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ -no-acpi \ -boot c \ --=20 2.14.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list