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

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