From nobody Sat Feb 7 09:30:32 2026 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 1530704039358530.2466622940302; Wed, 4 Jul 2018 04:33:59 -0700 (PDT) Received: from localhost ([::1]:46309 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fag2o-0003fj-J1 for importer@patchew.org; Wed, 04 Jul 2018 07:33:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58797) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fag1a-00036J-5i for qemu-devel@nongnu.org; Wed, 04 Jul 2018 07:32:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fag1Y-0002ll-VR for qemu-devel@nongnu.org; Wed, 04 Jul 2018 07:32:42 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:38714 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 1fag1S-0002jL-6L; Wed, 04 Jul 2018 07:32:34 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 46AFB4007389; Wed, 4 Jul 2018 11:32:33 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-117-3.ams2.redhat.com [10.36.117.3]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4F8AC111CB82; Wed, 4 Jul 2018 11:32:32 +0000 (UTC) From: Kevin Wolf To: qemu-block@nongnu.org Date: Wed, 4 Jul 2018 13:32:27 +0200 Message-Id: <20180704113227.23454-1-kwolf@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 04 Jul 2018 11:32:33 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 04 Jul 2018 11:32:33 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.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] [PATCH] 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, pkrempa@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com 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