* [PATCH v2] hw/net/vmxnet3: Do not abort if guest provides bad interrupt numbers
@ 2026-07-31 11:33 Thomas Huth
2026-07-31 13:06 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 2+ messages in thread
From: Thomas Huth @ 2026-07-31 11:33 UTC (permalink / raw)
To: qemu-devel, Dmitry Fleytman
Cc: Jason Wang, qemu-trivial, qemu-stable,
Philippe Mathieu-Daudé
From: Thomas Huth <thuth@redhat.com>
vmxnet3_validate_interrupts() currently aborts via hw_error() if
the guest provided bad interrupt numbers. This should not happen,
QEMU should rather refuse to activate the device in this case instead.
Thus propagate the error to the callers to handle it more gracefully
there.
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/539
Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
v2: Drop the unnecessary vmxnet3_reset()
hw/net/vmxnet3.c | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 8569484b2f2..24c551a0547 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -1336,32 +1336,46 @@ static bool vmxnet3_verify_intx(VMXNET3State *s, int intx)
|| intx == pci_get_byte(s->parent_obj.config + PCI_INTERRUPT_PIN) - 1;
}
-static void vmxnet3_validate_interrupt_idx(bool is_msix, int idx)
+static bool vmxnet3_validate_irq_idx(const char *type, bool is_msix, int idx)
{
int max_ints = is_msix ? VMXNET3_MAX_INTRS : VMXNET3_MAX_NMSIX_INTRS;
+
if (idx >= max_ints) {
- hw_error("Bad interrupt index: %d\n", idx);
+ qemu_log_mask(LOG_GUEST_ERROR,
+ "vmxnet3: Bad %s queue interrupt index: %d\n",
+ type, idx);
+ return false;
}
+
+ return true;
}
-static void vmxnet3_validate_interrupts(VMXNET3State *s)
+static bool vmxnet3_validate_interrupts(VMXNET3State *s)
{
int i;
VMW_CFPRN("Verifying event interrupt index (%d)", s->event_int_idx);
- vmxnet3_validate_interrupt_idx(s->msix_used, s->event_int_idx);
+ if (!vmxnet3_validate_irq_idx("event", s->msix_used, s->event_int_idx)) {
+ return false;
+ }
for (i = 0; i < s->txq_num; i++) {
int idx = s->txq_descr[i].intr_idx;
VMW_CFPRN("Verifying TX queue %d interrupt index (%d)", i, idx);
- vmxnet3_validate_interrupt_idx(s->msix_used, idx);
+ if (!vmxnet3_validate_irq_idx("TX", s->msix_used, idx)) {
+ return false;
+ }
}
for (i = 0; i < s->rxq_num; i++) {
int idx = s->rxq_descr[i].intr_idx;
VMW_CFPRN("Verifying RX queue %d interrupt index (%d)", i, idx);
- vmxnet3_validate_interrupt_idx(s->msix_used, idx);
+ if (!vmxnet3_validate_irq_idx("RX", s->msix_used, idx)) {
+ return false;
+ }
}
+
+ return true;
}
static bool vmxnet3_validate_queues(VMXNET3State *s)
@@ -1554,7 +1568,9 @@ static void vmxnet3_activate_device(VMXNET3State *s)
sizeof(s->rxq_descr[i].rxq_stats));
}
- vmxnet3_validate_interrupts(s);
+ if (!vmxnet3_validate_interrupts(s)) {
+ return;
+ }
/* Make sure everything is in place before device activation */
smp_wmb();
@@ -2392,7 +2408,9 @@ static int vmxnet3_post_load(void *opaque, int version_id)
if (!vmxnet3_validate_queues(s)) {
return -1;
}
- vmxnet3_validate_interrupts(s);
+ if (!vmxnet3_validate_interrupts(s)) {
+ return -1;
+ }
return 0;
}
--
2.55.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH v2] hw/net/vmxnet3: Do not abort if guest provides bad interrupt numbers
2026-07-31 11:33 [PATCH v2] hw/net/vmxnet3: Do not abort if guest provides bad interrupt numbers Thomas Huth
@ 2026-07-31 13:06 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 2+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-07-31 13:06 UTC (permalink / raw)
To: Thomas Huth, qemu-devel, Dmitry Fleytman
Cc: Jason Wang, qemu-trivial, qemu-stable
On 31/7/26 13:33, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> vmxnet3_validate_interrupts() currently aborts via hw_error() if
> the guest provided bad interrupt numbers. This should not happen,
> QEMU should rather refuse to activate the device in this case instead.
> Thus propagate the error to the callers to handle it more gracefully
> there.
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/539
> Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> v2: Drop the unnecessary vmxnet3_reset()
>
> hw/net/vmxnet3.c | 34 ++++++++++++++++++++++++++--------
> 1 file changed, 26 insertions(+), 8 deletions(-)
> @@ -1554,7 +1568,9 @@ static void vmxnet3_activate_device(VMXNET3State *s)
> sizeof(s->rxq_descr[i].rxq_stats));
> }
>
> - vmxnet3_validate_interrupts(s);
> + if (!vmxnet3_validate_interrupts(s)) {
> + return;
> + }
Better, thanks.
If nobody queue this patch, I can take it via my hw-misc tree, but
after the release (since this is a very old issue).
Regards,
Phil.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-31 13:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-31 11:33 [PATCH v2] hw/net/vmxnet3: Do not abort if guest provides bad interrupt numbers Thomas Huth
2026-07-31 13:06 ` Philippe Mathieu-Daudé
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.