|
|
383d26 |
From 524287dc348c81473dd19b275a0333dd2e888878 Mon Sep 17 00:00:00 2001
|
|
|
383d26 |
From: Kevin Wolf <kwolf@redhat.com>
|
|
|
383d26 |
Date: Thu, 5 Jul 2018 16:47:51 +0200
|
|
|
383d26 |
Subject: [PATCH 16/89] block: Don't silently truncate node names
|
|
|
383d26 |
|
|
|
383d26 |
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
|
|
383d26 |
Message-id: <20180705164751.15271-2-kwolf@redhat.com>
|
|
|
383d26 |
Patchwork-id: 81234
|
|
|
383d26 |
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 1/1] block: Don't silently truncate node names
|
|
|
383d26 |
Bugzilla: 1549654
|
|
|
383d26 |
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
|
|
|
383d26 |
RH-Acked-by: Max Reitz <mreitz@redhat.com>
|
|
|
383d26 |
RH-Acked-by: John Snow <jsnow@redhat.com>
|
|
|
383d26 |
|
|
|
383d26 |
If the user passes a too long node name string, we silently truncate it
|
|
|
383d26 |
to fit into BlockDriverState.node_name, i.e. to 31 characters. Apart
|
|
|
383d26 |
from surprising the user when the node has a different name than
|
|
|
383d26 |
requested, this also bypasses the check for duplicate names, so that the
|
|
|
383d26 |
same name can be assigned to multiple nodes.
|
|
|
383d26 |
|
|
|
383d26 |
Fix this by just making too long node names an error.
|
|
|
383d26 |
|
|
|
383d26 |
Reported-by: Peter Krempa <pkrempa@redhat.com>
|
|
|
383d26 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
383d26 |
(cherry picked from commit 824808dd77821ceba05357cb1ee4069a6a95bebd)
|
|
|
383d26 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
383d26 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
383d26 |
---
|
|
|
383d26 |
block.c | 6 ++++++
|
|
|
383d26 |
tests/qemu-iotests/051 | 15 +++++++++++++++
|
|
|
383d26 |
tests/qemu-iotests/051.out | 23 +++++++++++++++++++++++
|
|
|
383d26 |
tests/qemu-iotests/051.pc.out | 23 +++++++++++++++++++++++
|
|
|
383d26 |
4 files changed, 67 insertions(+)
|
|
|
383d26 |
|
|
|
383d26 |
diff --git a/block.c b/block.c
|
|
|
383d26 |
index afe30ca..0516284 100644
|
|
|
383d26 |
--- a/block.c
|
|
|
383d26 |
+++ b/block.c
|
|
|
383d26 |
@@ -1140,6 +1140,12 @@ static void bdrv_assign_node_name(BlockDriverState *bs,
|
|
|
383d26 |
goto out;
|
|
|
383d26 |
}
|
|
|
383d26 |
|
|
|
383d26 |
+ /* Make sure that the node name isn't truncated */
|
|
|
383d26 |
+ if (strlen(node_name) >= sizeof(bs->node_name)) {
|
|
|
383d26 |
+ error_setg(errp, "Node name too long");
|
|
|
383d26 |
+ goto out;
|
|
|
383d26 |
+ }
|
|
|
383d26 |
+
|
|
|
383d26 |
/* copy node name into the bs and insert it into the graph list */
|
|
|
383d26 |
pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
|
|
|
383d26 |
QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
|
|
|
383d26 |
diff --git a/tests/qemu-iotests/051 b/tests/qemu-iotests/051
|
|
|
383d26 |
index 69d34eb..c5cc0ee 100755
|
|
|
383d26 |
--- a/tests/qemu-iotests/051
|
|
|
383d26 |
+++ b/tests/qemu-iotests/051
|
|
|
383d26 |
@@ -100,6 +100,21 @@ run_qemu -drive file="$TEST_IMG",driver=raw,format=qcow2
|
|
|
383d26 |
run_qemu -drive file="$TEST_IMG",driver=qcow2,format=qcow2
|
|
|
383d26 |
|
|
|
383d26 |
echo
|
|
|
383d26 |
+echo === Node names ===
|
|
|
383d26 |
+echo
|
|
|
383d26 |
+
|
|
|
383d26 |
+# Maximum length: 31 characters
|
|
|
383d26 |
+run_qemu -drive file="$TEST_IMG",node-name=x123456789012345678901234567890
|
|
|
383d26 |
+run_qemu -drive file="$TEST_IMG",node-name=x1234567890123456789012345678901
|
|
|
383d26 |
+
|
|
|
383d26 |
+# First character must be alphabetic
|
|
|
383d26 |
+# Following characters alphanumeric or -._
|
|
|
383d26 |
+run_qemu -drive file="$TEST_IMG",node-name=All-Types.of_all0wed_chars
|
|
|
383d26 |
+run_qemu -drive file="$TEST_IMG",node-name=123foo
|
|
|
383d26 |
+run_qemu -drive file="$TEST_IMG",node-name=_foo
|
|
|
383d26 |
+run_qemu -drive file="$TEST_IMG",node-name=foo#12
|
|
|
383d26 |
+
|
|
|
383d26 |
+echo
|
|
|
383d26 |
echo === Device without drive ===
|
|
|
383d26 |
echo
|
|
|
383d26 |
|
|
|
383d26 |
diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out
|
|
|
383d26 |
index dd9846d..b727350 100644
|
|
|
383d26 |
--- a/tests/qemu-iotests/051.out
|
|
|
383d26 |
+++ b/tests/qemu-iotests/051.out
|
|
|
383d26 |
@@ -47,6 +47,29 @@ Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2
|
|
|
383d26 |
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2: Cannot specify both 'driver' and 'format'
|
|
|
383d26 |
|
|
|
383d26 |
|
|
|
383d26 |
+=== Node names ===
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=x123456789012345678901234567890
|
|
|
383d26 |
+QEMU X.Y.Z monitor - type 'help' for more information
|
|
|
383d26 |
+(qemu) quit
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901
|
|
|
383d26 |
+QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901: Node name too long
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=All-Types.of_all0wed_chars
|
|
|
383d26 |
+QEMU X.Y.Z monitor - type 'help' for more information
|
|
|
383d26 |
+(qemu) quit
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=123foo
|
|
|
383d26 |
+QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=123foo: Invalid node name
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=_foo
|
|
|
383d26 |
+QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=_foo: Invalid node name
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=foo#12
|
|
|
383d26 |
+QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=foo#12: Invalid node name
|
|
|
383d26 |
+
|
|
|
383d26 |
+
|
|
|
383d26 |
=== Device without drive ===
|
|
|
383d26 |
|
|
|
383d26 |
Testing: -device VIRTIO_SCSI -device scsi-hd
|
|
|
383d26 |
diff --git a/tests/qemu-iotests/051.pc.out b/tests/qemu-iotests/051.pc.out
|
|
|
383d26 |
index b01f9a9..e9257fe 100644
|
|
|
383d26 |
--- a/tests/qemu-iotests/051.pc.out
|
|
|
383d26 |
+++ b/tests/qemu-iotests/051.pc.out
|
|
|
383d26 |
@@ -47,6 +47,29 @@ Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2
|
|
|
383d26 |
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2: Cannot specify both 'driver' and 'format'
|
|
|
383d26 |
|
|
|
383d26 |
|
|
|
383d26 |
+=== Node names ===
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=x123456789012345678901234567890
|
|
|
383d26 |
+QEMU X.Y.Z monitor - type 'help' for more information
|
|
|
383d26 |
+(qemu) quit
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901
|
|
|
383d26 |
+QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901: Node name too long
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=All-Types.of_all0wed_chars
|
|
|
383d26 |
+QEMU X.Y.Z monitor - type 'help' for more information
|
|
|
383d26 |
+(qemu) quit
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=123foo
|
|
|
383d26 |
+QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=123foo: Invalid node name
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=_foo
|
|
|
383d26 |
+QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=_foo: Invalid node name
|
|
|
383d26 |
+
|
|
|
383d26 |
+Testing: -drive file=TEST_DIR/t.qcow2,node-name=foo#12
|
|
|
383d26 |
+QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=foo#12: Invalid node name
|
|
|
383d26 |
+
|
|
|
383d26 |
+
|
|
|
383d26 |
=== Device without drive ===
|
|
|
383d26 |
|
|
|
383d26 |
Testing: -device VIRTIO_SCSI -device scsi-hd
|
|
|
383d26 |
--
|
|
|
383d26 |
1.8.3.1
|
|
|
383d26 |
|