diff options
author | Amit Shah <amit.shah@redhat.com> | 2010-07-21 15:08:30 +0530 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2010-07-30 22:59:55 +0200 |
commit | 5ab4bb598d3f58542a06a6946f04b140be222892 (patch) | |
tree | ecff8852cbe9f404fee070ec064a2c03b1a33f6e /hw/virtio-serial-bus.c | |
parent | cdc6f542007a6aee0b18a5d616d031c750691e7a (diff) | |
download | qemu-5ab4bb598d3f58542a06a6946f04b140be222892.zip qemu-5ab4bb598d3f58542a06a6946f04b140be222892.tar.gz qemu-5ab4bb598d3f58542a06a6946f04b140be222892.tar.bz2 |
virtio-serial: Check if more max_ports specified than we can handle
Currently virtio-serial supports a maximum of 31 ports. Specifying the
'max_ports' parameter to be > 31 on the cmd line causes badness.
Ensure we initialise virtio-serial only if max_ports is within the
supported range.
Signed-off-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'hw/virtio-serial-bus.c')
-rw-r--r-- | hw/virtio-serial-bus.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c index 8e611c0..0586b89 100644 --- a/hw/virtio-serial-bus.c +++ b/hw/virtio-serial-bus.c @@ -734,11 +734,19 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports) { VirtIOSerial *vser; VirtIODevice *vdev; - uint32_t i; + uint32_t i, max_supported_ports; if (!max_nr_ports) return NULL; + /* Each port takes 2 queues, and one pair is for the control queue */ + max_supported_ports = VIRTIO_PCI_QUEUE_MAX / 2 - 1; + + if (max_nr_ports > max_supported_ports) { + error_report("maximum ports supported: %u", max_supported_ports); + return NULL; + } + vdev = virtio_common_init("virtio-serial", VIRTIO_ID_CONSOLE, sizeof(struct virtio_console_config), sizeof(VirtIOSerial)); |