@samitouri / QOSamiQemu / commits / bf10c11af5

vfio-user: vfio_user_device_io_set_irqs: prevent buffer overflow

This isn't in practise a problem since irq->argsz is not externally provided, it's a good hardening step nonetheless. Fixes: ca1add1696 ("vfio-user: implement VFIO_USER_DEVICE_GET/SET_IRQ*") Signed-off-by: Thanos Makatos <thanos.makatos@nutanix.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20260721122643.30985-9-thanos.makatos@nutanix.com Signed-off-by: Cédric Le Goater <clg@redhat.com>

Thanos Makatos committed Jul 21, 2026 at 12:27 UTC bf10c11af515e7de6343a429f9d6b505c504d531
1 file changed +4 -1
hw/vfio-user/device.c
+4 -1
@@ -293,7 +293,10 @@ static int vfio_user_device_io_set_irqs(VFIODevice *vbasedev,
293 * Handle simple case
294 */
295 if ((irq->flags & VFIO_IRQ_SET_DATA_EVENTFD) == 0) {
296 - size = sizeof(VFIOUserHdr) + irq->argsz;
296 + if (__builtin_add_overflow(irq->argsz, sizeof(VFIOUserHdr), &size)) {
297 + error_printf("vfio_user_set_irqs argsz too large\n");
298 + return -E2BIG;
299 + }
300 msgp = g_malloc0(size);
301
302 vfio_user_request_msg(&msgp->hdr, VFIO_USER_DEVICE_SET_IRQS, size, 0);