All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@oss.qualcomm.com>
To: qemu-devel@nongnu.org
Subject: [PULL 54/59] hw/net/cadence_gem: Check guest-provided queue numbers in screening registers
Date: Tue, 27 Oct 2026 20:23:35 +0100	[thread overview]
Message-ID: <20261027192341.9197-55-philmd@oss.qualcomm.com> (raw)
In-Reply-To: <20261027192341.9197-1-philmd@oss.qualcomm.com>

From: Peter Maydell <peter.maydell@linaro.org>

The Cadence GEM allows the guest to program "screening registers"
which control which queue received network data should be sent to.
The field for the queue number in these registers is 4 bits, but the
device might not actually have that many queues.  We weren't checking
this, which meant the guest could program a value that caused us to
index off the end of various arrays.

Check against num_priority_queues, and treat out-of-range values
as if the screen didn't match (i.e. go to queue 0). (This is a
best guess at reasonable behaviour since I don't have access to
a datasheet for this device.)

Cc: qemu-stable@nongnu.org
Fixes: e8e4994313b7 ("cadence_gem: Add support for screening")
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4363
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Message-ID: <20261023153106.1710228-1-peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
---
 hw/net/cadence_gem.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
index 39e3620ef5ba..9a94b3b8ca4c 100644
--- a/hw/net/cadence_gem.c
+++ b/hw/net/cadence_gem.c
@@ -854,6 +854,7 @@ static int get_queue_from_screen(CadenceGEMState *s, uint8_t *rxbuf_ptr,
     uint32_t reg;
     bool matched, mismatched;
     int i, j;
+    int queue = 0; /* default to queue 0 if no match */
 
     for (i = 0; i < s->num_type1_screeners; i++) {
         reg = s->regs[R_SCREENING_TYPE1_REG0 + i];
@@ -881,7 +882,8 @@ static int get_queue_from_screen(CadenceGEMState *s, uint8_t *rxbuf_ptr,
         }
 
         if (matched && !mismatched) {
-            return FIELD_EX32(reg, SCREENING_TYPE1_REG0, QUEUE_NUM);
+            queue = FIELD_EX32(reg, SCREENING_TYPE1_REG0, QUEUE_NUM);
+            goto out;
         }
     }
 
@@ -974,12 +976,23 @@ static int get_queue_from_screen(CadenceGEMState *s, uint8_t *rxbuf_ptr,
         }
 
         if (matched && !mismatched) {
-            return FIELD_EX32(reg, SCREENING_TYPE2_REG0, QUEUE_NUM);
+            queue = FIELD_EX32(reg, SCREENING_TYPE2_REG0, QUEUE_NUM);
+            break;
         }
     }
 
-    /* We made it here, assume it's queue 0 */
-    return 0;
+out:
+    if (queue >= s->num_priority_queues) {
+        qemu_log_mask(LOG_GUEST_ERROR,
+                      "Screening register selected out of range queue %d\n",
+                      queue);
+        /*
+         * This is a best guess at reasonable behaviour in the absence
+         * of a datasheet to confirm it.
+         */
+        queue = 0;
+    }
+    return queue;
 }
 
 static uint32_t gem_get_queue_base_addr(CadenceGEMState *s, bool tx, int q)
-- 
2.55.0



  parent reply	other threads:[~2026-10-27 19:31 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-27 19:22 [PULL 00/59] Misc HW patches for 2026-10-27 Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 01/59] scripts/checkpatch.pl: Don't complain about spaces before Fixes tags Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 02/59] hw/sd/sdcard: Keep high-capacity memory blocks at 512 bytes Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 03/59] hw/watchdog/wdt_imx2: Preserve own locked bits in WCR Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 04/59] hw/watchdog/wdt_imx2: Fix handling of write one once WCR bits Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 05/59] hw/watchdog/wdt_imx2: Clear WDT lock on reset Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 06/59] hw/watchdog/wdt_imx2: Remove redundant attributes Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 07/59] hw/arm/imx8mm-evk: Fix reference count of SoC object Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 08/59] docs, tests/functional: Drop redundant CLI arguments in imx8m*-evk invocations Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 09/59] hw/arm/sabrelite: Have 4 CPUs and 1 GiB of RAM by default Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 10/59] tests/functional/arm: Add console test for `sabrelite` machine Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 11/59] hw/arm/mcimx6ul-evk: Have 512 MiB of RAM by default Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 12/59] hw/arm/mcimx7d-sabre: Have 2 CPUs and 2 GiB " Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 13/59] tests/functional/arm: Add console test for `mcimx7d-sabre` machine Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 14/59] hw/arm/fsl-imx25: Derive from TYPE_SYS_BUS_DEVICE Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 15/59] hw/arm/fsl-imx31: " Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 16/59] hw/arm/fsl-imx6: " Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 17/59] hw/arm/fsl-imx6ul: " Philippe Mathieu-Daudé
2026-10-27 19:22 ` [PULL 18/59] hw/arm/fsl-imx7: " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 19/59] hw/timer/imx_gpt: Wire clock control module via link property Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 20/59] hw/timer/imx_epit: " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 21/59] hw/arm/Kconfig: Select missing UNIMP in config FSL_IMX8MM Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 22/59] hw/misc/Kconfig: Remove redundant USB_EHCI_SYSBUS from config IMX Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 23/59] Kconfig: Extract config IMX_AVIC " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 24/59] Kconfig: Extract config IMX_GPCV2 " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 25/59] Kconfig: Extract config IMX_RNG " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 26/59] Kconfig: Extract config FSL_IMX7_GPR " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 27/59] Kconfig: Extract config FSL_IMX{6, 7}_SRC " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 28/59] Kconfig: Extract config FSL_IMX7_SNVS " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 29/59] Kconfig: Extract dedicated config FSL_IMXx_CCM " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 30/59] Kconfig: Extract config IMX_GPT " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 31/59] Kconfig: Extract config IMX_EPIT " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 32/59] Kconfig: Extract config GPIO_IMX " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 33/59] Kconfig: Extract config IMX_SPI " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 34/59] Kconfig: Extract config IMX_SERIAL " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 35/59] Kconfig: Remove " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 36/59] hw/vmapple/Kconfig: Remove unused GPIO_PWR dependency Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 37/59] hw/arm/fsl-imx8m: Fix typo Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 38/59] hw/misc/imx6_src: Avoid casting from void * Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 39/59] hw/char/imx_serial: " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 40/59] hw/intc/imx_avic: " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 41/59] hw/misc/imx*_ccm: " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 42/59] hw/usb/imx-usb-phy: " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 43/59] hw/net/imx_fec: Trace with QOM path where easily possible Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 44/59] hw/net/lan9118_phy: Trace with QOM path Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 45/59] hw/watchdog/wdt_imx2: " Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 46/59] hw/arm: remove pci-bridge/pci_expander_bridge.h from virt.c Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 47/59] MAINTAINERS: Update Gustavo's email address Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 48/59] hw/char/sh_serial: fix RDF flag clear on FIFO reset Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 49/59] hw/char/sh_serial: use rx_cnt for available FIFO space Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 50/59] hw/char/sh_serial: fix break detection flag Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 51/59] system: Remove deprecated 'debug-threads' option for -name Philippe Mathieu-Daudé
2026-10-28  1:01   ` Richard Henderson
2026-10-28  7:32     ` Philippe Mathieu-Daudé
2026-10-28  8:13       ` Richard Henderson
2026-10-28  9:47       ` Daniel P. Berrangé
2026-10-28 11:54         ` Peter Xu
2026-10-28 12:04           ` Daniel P. Berrangé
2026-10-27 19:23 ` [PULL 52/59] hw/pci-host/aspeed_pcie: Fix global MSI setting during class initialization Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 53/59] hw/net/can/flexcan: Fix FLEXCAN_CRCR_MBCRC definition Philippe Mathieu-Daudé
2026-10-27 19:23 ` Philippe Mathieu-Daudé [this message]
2026-10-27 19:23 ` [PULL 55/59] hw/misc/allwinner-h3-dramc: Avoid shift by negative amount Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 56/59] hw/display/xlnx_dp: Make assertions clearer Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 57/59] qemu/arch-defs: extract QEMU_ARCH_BIT for QEMU_ARCH_* enums Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 58/59] qemu/arch-defs: Use SYS_EMU_TARGET__MAX to define QEMU_ARCH_ALL Philippe Mathieu-Daudé
2026-10-27 19:23 ` [PULL 59/59] qemu/arch-defs: increase width of QEMU_ARCH_* masks enums to be 64 bits Philippe Mathieu-Daudé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261027192341.9197-55-philmd@oss.qualcomm.com \
    --to=philmd@oss.qualcomm.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.