[PATCH] virtio: make virtio_add_queue() queue_size an unsigned int

Stefan Hajnoczi <[email protected]>
Newsgroups gmane.comp.emulators.qemu
Message-ID <[email protected]>
virtio_add_queue()'s queue_size argument is a signed int. Coverity is
unhappy when that type is used as an argument to g_new0():

  *** CID 1664271:         Error handling issues  (NEGATIVE_RETURNS)
  /builds/qemu-project/qemu/hw/virtio/virtio.c: 2595             in virtio_add_queue()
  2589         }
  2590
  2591         vdev->vq[i].vring.num = queue_size;
  2592         vdev->vq[i].vring.num_default = queue_size;
  2593         vdev->vq[i].vring.align = VIRTIO_PCI_VRING_ALIGN;
  2594         vdev->vq[i].handle_output = handle_output;
  >>>     CID 1664271:         Error handling issues  (NEGATIVE_RETURNS)
  >>>     "__n" is passed to a parameter that cannot be negative.
  2595         vdev->vq[i].used_elems = g_new0(VirtQueueElement, queue_size);

The vdev->vq[i].vring.num and num_default fields are already declared as
unsigned int, so change the virtio_add_queue() argument's type for
consistency.

A note on consistency: the VIRTIO specification defines queue size as an
unsigned 16-bit value. QEMU's device models variously use uint16_t,
uint32_t, and other unsigned types for queue size qdev properties.
virtio_add_queue() limits queue size to the much smaller
VIRTQUEUE_MAX_SIZE (1024) constant, so the different widths don't really
matter.

I have checked that all callers of virtio_add_queue() pass an unsigned
queue size.

Signed-off-by: Stefan Hajnoczi <[email protected]>
---
 include/hw/virtio/virtio.h | 2 +-
 hw/virtio/virtio.c         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index c99cb19d886..ff7f837fb92 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -302,7 +302,7 @@ void virtio_device_set_child_bus_name(VirtIODevice *vdev, char *bus_name);
 
 typedef void (*VirtIOHandleOutput)(VirtIODevice *, VirtQueue *);
 
-VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size,
+VirtQueue *virtio_add_queue(VirtIODevice *vdev, unsigned int queue_size,
                             VirtIOHandleOutput handle_output);
 
 void virtio_del_queue(VirtIODevice *vdev, int n);
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index daa5607338c..e1210f024c6 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -2564,7 +2564,7 @@ void virtio_queue_set_vector(VirtIODevice *vdev, int n, uint16_t vector)
     }
 }
 
-VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size,
+VirtQueue *virtio_add_queue(VirtIODevice *vdev, unsigned int queue_size,
                             VirtIOHandleOutput handle_output)
 {
     int i;
-- 
2.55.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.