fsl/fman: Validate cell-index value obtained from Device Tree
BugLink: https://bugs.launchpad.net/bugs/2102118 [ Upstream commit bd50c4125c98bd1a86f8e514872159700a9c678c ] Cell-index value is obtained from Device Tree and then used to calculate the index for accessing arrays port_mfl[], mac_mfl[] and intr_mng[]. In case of broken DT due to any error cell-index can contain any value and it is possible to go beyond the array boundaries which can lead at least to memory corruption. Validate cell-index value obtained from Device Tree. Found by Linux Verification Center (linuxtesting.org) with SVACE. Reviewed-by: Sean Anderson <sean.anderson@seco.com> Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru> Link: https://patch.msgid.link/20241028065824.15452-1-amishin@t-argos.ru Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Koichiro Den <koichiro.den@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
This commit is contained in:
committed by
Stefan Bader
parent
2bc0bfa827
commit
70dcb92d26
@@ -24,7 +24,6 @@
|
||||
|
||||
/* General defines */
|
||||
#define FMAN_LIODN_TBL 64 /* size of LIODN table */
|
||||
#define MAX_NUM_OF_MACS 10
|
||||
#define FM_NUM_OF_FMAN_CTRL_EVENT_REGS 4
|
||||
#define BASE_RX_PORTID 0x08
|
||||
#define BASE_TX_PORTID 0x28
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
#define BM_MAX_NUM_OF_POOLS 64 /* Buffers pools */
|
||||
#define FMAN_PORT_MAX_EXT_POOLS_NUM 8 /* External BM pools per Rx port */
|
||||
|
||||
/* General defines */
|
||||
#define MAX_NUM_OF_MACS 10
|
||||
|
||||
struct fman; /* FMan data */
|
||||
|
||||
/* Enum for defining port types */
|
||||
|
||||
@@ -259,6 +259,11 @@ static int mac_probe(struct platform_device *_of_dev)
|
||||
err = -EINVAL;
|
||||
goto _return_dev_put;
|
||||
}
|
||||
if (val >= MAX_NUM_OF_MACS) {
|
||||
dev_err(dev, "cell-index value is too big for %pOF\n", mac_node);
|
||||
err = -EINVAL;
|
||||
goto _return_dev_put;
|
||||
}
|
||||
priv->cell_index = (u8)val;
|
||||
|
||||
/* Get the MAC address */
|
||||
|
||||
Reference in New Issue
Block a user