From nobody Wed Dec 17 05:36:59 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1530787200052394.4151273461829; Thu, 5 Jul 2018 03:40:00 -0700 (PDT) Received: from localhost ([::1]:51733 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fb1g7-0000VY-AS for importer@patchew.org; Thu, 05 Jul 2018 06:39:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58442) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fb1T0-0006yT-CL for qemu-devel@nongnu.org; Thu, 05 Jul 2018 06:26:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fb1Sv-0004jK-Sr for qemu-devel@nongnu.org; Thu, 05 Jul 2018 06:26:26 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:44098 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fb1Sr-0004YM-VI; Thu, 05 Jul 2018 06:26:18 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7873D4023132; Thu, 5 Jul 2018 10:26:17 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-117-44.ams2.redhat.com [10.36.117.44]) by smtp.corp.redhat.com (Postfix) with ESMTP id AA48A7C3E; Thu, 5 Jul 2018 10:26:16 +0000 (UTC) From: Kevin Wolf To: qemu-block@nongnu.org Date: Thu, 5 Jul 2018 12:25:58 +0200 Message-Id: <20180705102604.4986-7-kwolf@redhat.com> In-Reply-To: <20180705102604.4986-1-kwolf@redhat.com> References: <20180705102604.4986-1-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Thu, 05 Jul 2018 10:26:17 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Thu, 05 Jul 2018 10:26:17 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'kwolf@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PULL v2 06/12] block: Don't silently truncate node names X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If the user passes a too long node name string, we silently truncate it to fit into BlockDriverState.node_name, i.e. to 31 characters. Apart from surprising the user when the node has a different name than requested, this also bypasses the check for duplicate names, so that the same name can be assigned to multiple nodes. Fix this by just making too long node names an error. Reported-by: Peter Krempa Signed-off-by: Kevin Wolf --- block.c | 6 ++++++ tests/qemu-iotests/051 | 15 +++++++++++++++ tests/qemu-iotests/051.out | 23 +++++++++++++++++++++++ tests/qemu-iotests/051.pc.out | 23 +++++++++++++++++++++++ 4 files changed, 67 insertions(+) diff --git a/block.c b/block.c index 961ec97d26..ac8b3a3511 100644 --- a/block.c +++ b/block.c @@ -1156,6 +1156,12 @@ static void bdrv_assign_node_name(BlockDriverState *= bs, goto out; } =20 + /* Make sure that the node name isn't truncated */ + if (strlen(node_name) >=3D sizeof(bs->node_name)) { + error_setg(errp, "Node name too long"); + goto out; + } + /* copy node name into the bs and insert it into the graph list */ pstrcpy(bs->node_name, sizeof(bs->node_name), node_name); QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list); diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051 index f617e25e24..ee9c820d0f 100755 --- a/tests/qemu-iotests/051 +++ b/tests/qemu-iotests/051 @@ -100,6 +100,21 @@ run_qemu -drive file=3D"$TEST_IMG",driver=3Draw,format= =3Dqcow2 run_qemu -drive file=3D"$TEST_IMG",driver=3Dqcow2,format=3Dqcow2 =20 echo +echo =3D=3D=3D Node names =3D=3D=3D +echo + +# Maximum length: 31 characters +run_qemu -drive file=3D"$TEST_IMG",node-name=3Dx12345678901234567890123456= 7890 +run_qemu -drive file=3D"$TEST_IMG",node-name=3Dx12345678901234567890123456= 78901 + +# First character must be alphabetic +# Following characters alphanumeric or -._ +run_qemu -drive file=3D"$TEST_IMG",node-name=3DAll-Types.of_all0wed_chars +run_qemu -drive file=3D"$TEST_IMG",node-name=3D123foo +run_qemu -drive file=3D"$TEST_IMG",node-name=3D_foo +run_qemu -drive file=3D"$TEST_IMG",node-name=3Dfoo#12 + +echo echo =3D=3D=3D Device without drive =3D=3D=3D echo =20 diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out index dd9846d1ce..b7273505c7 100644 --- a/tests/qemu-iotests/051.out +++ b/tests/qemu-iotests/051.out @@ -47,6 +47,29 @@ Testing: -drive file=3DTEST_DIR/t.qcow2,driver=3Dqcow2,f= ormat=3Dqcow2 QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,driver=3Dqcow2,format=3Dqcow2: C= annot specify both 'driver' and 'format' =20 =20 +=3D=3D=3D Node names =3D=3D=3D + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dx123456789012345678901= 234567890 +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) quit + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dx123456789012345678901= 2345678901 +QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dx1234567890123456789= 012345678901: Node name too long + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3DAll-Types.of_all0wed_c= hars +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) quit + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3D123foo +QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,node-name=3D123foo: Invalid node= name + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3D_foo +QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,node-name=3D_foo: Invalid node n= ame + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dfoo#12 +QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dfoo#12: Invalid node= name + + =3D=3D=3D Device without drive =3D=3D=3D =20 Testing: -device VIRTIO_SCSI -device scsi-hd diff --git a/tests/qemu-iotests/051.pc.out b/tests/qemu-iotests/051.pc.out index b01f9a90d7..e9257fe318 100644 --- a/tests/qemu-iotests/051.pc.out +++ b/tests/qemu-iotests/051.pc.out @@ -47,6 +47,29 @@ Testing: -drive file=3DTEST_DIR/t.qcow2,driver=3Dqcow2,f= ormat=3Dqcow2 QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,driver=3Dqcow2,format=3Dqcow2: C= annot specify both 'driver' and 'format' =20 =20 +=3D=3D=3D Node names =3D=3D=3D + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dx123456789012345678901= 234567890 +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) quit + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dx123456789012345678901= 2345678901 +QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dx1234567890123456789= 012345678901: Node name too long + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3DAll-Types.of_all0wed_c= hars +QEMU X.Y.Z monitor - type 'help' for more information +(qemu) quit + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3D123foo +QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,node-name=3D123foo: Invalid node= name + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3D_foo +QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,node-name=3D_foo: Invalid node n= ame + +Testing: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dfoo#12 +QEMU_PROG: -drive file=3DTEST_DIR/t.qcow2,node-name=3Dfoo#12: Invalid node= name + + =3D=3D=3D Device without drive =3D=3D=3D =20 Testing: -device VIRTIO_SCSI -device scsi-hd --=20 2.13.6