summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2019-03-28 13:35:03 +0000
committerGerd Hoffmann <kraxel@redhat.com>2019-04-01 08:53:44 +0200
commit5189e30b146ab39f9da8f35a23fc3c8e30b219c2 (patch)
tree883d77821e63a95a59cbbcdc8fd6c230a7baf5a3
parent28605a22f564860c885bde42ad91840e9aacec45 (diff)
downloadfocaccia-qemu-5189e30b146ab39f9da8f35a23fc3c8e30b219c2.tar.gz
focaccia-qemu-5189e30b146ab39f9da8f35a23fc3c8e30b219c2.zip
hw/usb/bus.c: Handle "no speed matched" case in usb_mask_to_str()
In usb_mask_to_str() we convert a mask of USB speeds into
a human-readable string (like "full+high") for use in
tracing and error messages. However the conversion code
doesn't do anything to the string buffer if the passed in
speedmask doesn't match any of the recognized speeds,
which means that the tracing and error messages will
end up with random garbage in them. This can happen if
we're doing USB device passthrough.

Handle the "unrecognized speed" case by using the
string "unknown".

Fixes: https://bugs.launchpad.net/qemu/+bug/1603785
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20190328133503.6490-1-peter.maydell@linaro.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r--hw/usb/bus.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index 6fffab7bfa..9a74dc9560 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -500,6 +500,10 @@ static void usb_mask_to_str(char *dest, size_t size,
                             speeds[i].name);
         }
     }
+
+    if (pos == 0) {
+        snprintf(dest, size, "unknown");
+    }
 }
 
 void usb_check_attach(USBDevice *dev, Error **errp)