Skip to content

Commit

Permalink
hw/usb/dev-serial: Do not try to set vendorid or productid properties
Browse files Browse the repository at this point in the history
When starting QEMU with the legacy USB serial device like this:

 qemu-system-x86_64 -usbdevice serial:vendorid=0x1234:stdio

it currently aborts since the vendorid property does not exist
anymore (it has been removed by commit f29783f):

 Unexpected error in object_property_find() at qemu/qom/object.c:1008:
 qemu-system-x86_64: -usbdevice serial:vendorid=0x1234:stdio: Property
                     '.vendorid' not found
 Aborted (core dumped)

Fix this crash by issuing a more friendly error message instead
(and simplify the code also a little bit this way).

Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-id: 1493883704-27604-1-git-send-email-thuth@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
  • Loading branch information
huth authored and kraxel committed May 12, 2017
1 parent 99f9aeb commit aa612b3
Showing 1 changed file with 6 additions and 18 deletions.
24 changes: 6 additions & 18 deletions hw/usb/dev-serial.c
Expand Up @@ -513,27 +513,18 @@ static USBDevice *usb_serial_init(USBBus *bus, const char *filename)
{
USBDevice *dev;
Chardev *cdrv;
uint32_t vendorid = 0, productid = 0;
char label[32];
static int index;

while (*filename && *filename != ':') {
const char *p;
char *e;

if (strstart(filename, "vendorid=", &p)) {
vendorid = strtol(p, &e, 16);
if (e == p || (*e && *e != ',' && *e != ':')) {
error_report("bogus vendor ID %s", p);
return NULL;
}
filename = e;
error_report("vendorid is not supported anymore");
return NULL;
} else if (strstart(filename, "productid=", &p)) {
productid = strtol(p, &e, 16);
if (e == p || (*e && *e != ',' && *e != ':')) {
error_report("bogus product ID %s", p);
return NULL;
}
filename = e;
error_report("productid is not supported anymore");
return NULL;
} else {
error_report("unrecognized serial USB option %s", filename);
return NULL;
Expand All @@ -554,10 +545,7 @@ static USBDevice *usb_serial_init(USBBus *bus, const char *filename)

dev = usb_create(bus, "usb-serial");
qdev_prop_set_chr(&dev->qdev, "chardev", cdrv);
if (vendorid)
qdev_prop_set_uint16(&dev->qdev, "vendorid", vendorid);
if (productid)
qdev_prop_set_uint16(&dev->qdev, "productid", productid);

return dev;
}

Expand Down

0 comments on commit aa612b3

Please sign in to comment.