Blame SOURCES/kvm-block-Don-t-silently-truncate-node-names.patch

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