Commit ed48a84a authored by Junrui Luo's avatar Junrui Luo Committed by Jakub Kicinski
Browse files

dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero



The driver allocates arrays for ports, FDBs, and filter blocks using
kcalloc() with ethsw->sw_attr.num_ifs as the element count. When the
device reports zero interfaces (either due to hardware configuration
or firmware issues), kcalloc(0, ...) returns ZERO_SIZE_PTR (0x10)
instead of NULL.

Later in dpaa2_switch_probe(), the NAPI initialization unconditionally
accesses ethsw->ports[0]->netdev, which attempts to dereference
ZERO_SIZE_PTR (address 0x10), resulting in a kernel panic.

Add a check to ensure num_ifs is greater than zero after retrieving
device attributes. This prevents the zero-sized allocations and
subsequent invalid pointer dereference.

Reported-by: default avatarYuhao Jiang <danisjiang@gmail.com>
Reported-by: default avatarJunrui Luo <moonafterrain@outlook.com>
Fixes: 0b1b7137 ("staging: dpaa2-switch: handle Rx path on control interface")
Signed-off-by: default avatarJunrui Luo <moonafterrain@outlook.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/SYBPR01MB7881BEABA8DA896947962470AF91A@SYBPR01MB7881.ausprd01.prod.outlook.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent de5720f9
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -3024,6 +3024,12 @@ static int dpaa2_switch_init(struct fsl_mc_device *sw_dev)
		goto err_close;
	}

	if (!ethsw->sw_attr.num_ifs) {
		dev_err(dev, "DPSW device has no interfaces\n");
		err = -ENODEV;
		goto err_close;
	}

	err = dpsw_get_api_version(ethsw->mc_io, 0,
				   &ethsw->major,
				   &ethsw->minor);