]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: enetc: fix potential divide-by-zero when num_vsi is zero
authorWei Fang <wei.fang@nxp.com>
Wed, 24 Jun 2026 07:27:26 +0000 (15:27 +0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 25 Jun 2026 15:40:08 +0000 (08:40 -0700)
For i.MX94 series, all the standalone ENETCs do not support SR-IOV, so
pf->caps.num_vsi is zero. This leads to a divide-by-zero in
enetc4_default_rings_allocation() when distributing rings among PF and
VFs.

Division by zero is undefined behavior in C. On ARM64, the UDIV/SDIV
instructions silently return zero rather than raising an exception, so
the issue does not cause a visible crash. However, relying on this
behavior is incorrect and poses a cross-platform compatibility risk.

Add an explicit check for num_vsi == 0 and return early after the PF's
rings have been configured.

Fixes: 2d673b0e2f8d ("net: enetc: add standalone ENETC support for i.MX94")
Signed-off-by: Wei Fang <wei.fang@nxp.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20260624072726.1238903-1-wei.fang@oss.nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/enetc/enetc4_pf.c

index 4e771f8523580494cc9dafec2600293f24af5fce..437a15bbb47ba84a9984dc834f507ec3b9a1a8ed 100644 (file)
@@ -322,6 +322,9 @@ static void enetc4_default_rings_allocation(struct enetc_pf *pf)
        val = enetc4_psicfgr0_val_construct(false, num_tx_bdr, num_rx_bdr);
        enetc_port_wr(hw, ENETC4_PSICFGR0(0), val);
 
+       if (!pf->caps.num_vsi)
+               return;
+
        num_rx_bdr = pf->caps.num_rx_bdr - num_rx_bdr;
        rx_rem = num_rx_bdr % pf->caps.num_vsi;
        num_rx_bdr = num_rx_bdr / pf->caps.num_vsi;