qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] block: Fix NULL dereference on empty drive erro


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH] block: Fix NULL dereference on empty drive error
Date: Mon, 5 Mar 2018 10:10:29 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

On 03/05/2018 09:05 AM, Kevin Wolf wrote:
blk_error_action() sends a BLOCK_IO_ERROR QMP event which includes the
node name of its root node. If the BlockBackend represents an empty
drive, there is no root node, so we should not try to access its node
name. Make the field optional in the event and include it only when
the BlockBackend isn't empty.

Signed-off-by: Kevin Wolf <address@hidden>
---

Stefan, this is needed for your patch that reverts the workaround in the
IDE flush code. Without it, make check seems to succeed, but if you look
closer, qemu actually segfaults.

qapi/block-core.json  | 6 ++++--
  block/block-backend.c | 5 +++--
  2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/qapi/block-core.json b/qapi/block-core.json
index 5c5921bfb7..00475f08d4 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -3676,7 +3676,8 @@
  #
  # @node-name: node name. Note that errors may be reported for the root node
  #             that is directly attached to a guest device rather than for the
-#             node where the error occurred. (Since: 2.8)
+#             node where the error occurred. The node name is not present if
+#             the drive is empty. (Since: 2.8)

Making an output field change from always present to sometimes absent might break older clients that expected to be able to parse the field unconditionally. Would it be better to keep the 'node-name' field mandatory in the output but make it an empty string?

Then again, since the field was not present prior to 2.8, but the event itself is older, we can argue that clients of older qemu have to be prepared for the field to not be present. So I think I can live with this change as-is.

  #
  # @operation: I/O operation
  #
@@ -3707,7 +3708,8 @@
  #
  ##
  { 'event': 'BLOCK_IO_ERROR',
-  'data': { 'device': 'str', 'node-name': 'str', 'operation': 
'IoOperationType',
+  'data': { 'device': 'str', '*node-name': 'str',
+            'operation': 'IoOperationType',
              'action': 'BlockErrorAction', '*nospace': 'bool',
              'reason': 'str' } }

Reviewed-by: Eric Blake <address@hidden>

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



reply via email to

[Prev in Thread] Current Thread [Next in Thread]