Le jeu. 28 mars 2019 14:36, Peter Maydell <peter.mayd...@linaro.org> a écrit :
> 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.mayd...@linaro.org> > --- > Tested by temporarily fiddling with the callsites to > pass in a 0 speedmask, since I don't have any USB passthrough > stuff handy. > --- > hw/usb/bus.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/hw/usb/bus.c b/hw/usb/bus.c > index 6fffab7bfa4..9a74dc95601 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) > -- > 2.20.1 > Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> >