diff mbox series

[net,4/5] fsl/fman: check dereferencing null pointer

Message ID 1596177969-27645-5-git-send-email-florinel.iordache@nxp.com
State Changes Requested
Delegated to: David Miller
Headers show
Series DPAA FMan driver fixes | expand

Commit Message

Florinel Iordache July 31, 2020, 6:46 a.m. UTC
Add a safe check to avoid dereferencing null pointer

Fixes: 57ba4c9b ("fsl/fman: Add FMan MAC support")

Signed-off-by: Florinel Iordache <florinel.iordache@nxp.com>
---
 drivers/net/ethernet/freescale/fman/fman_dtsec.c | 4 ++--
 drivers/net/ethernet/freescale/fman/fman_memac.c | 3 ++-
 drivers/net/ethernet/freescale/fman/fman_tgec.c  | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

Comments

Madalin Bucur July 31, 2020, 7:48 a.m. UTC | #1
> -----Original Message-----
> From: Florinel Iordache <florinel.iordache@nxp.com>
> Sent: 31 July 2020 09:46
> To: Madalin Bucur <madalin.bucur@nxp.com>; davem@davemloft.net;
> kuba@kernel.org; netdev@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org; Florinel Iordache
> <florinel.iordache@nxp.com>
> Subject: [PATCH net 4/5] fsl/fman: check dereferencing null pointer
> 
> Add a safe check to avoid dereferencing null pointer
> 
> Fixes: 57ba4c9b ("fsl/fman: Add FMan MAC support")
> 
> Signed-off-by: Florinel Iordache <florinel.iordache@nxp.com>
> ---
>  drivers/net/ethernet/freescale/fman/fman_dtsec.c | 4 ++--
>  drivers/net/ethernet/freescale/fman/fman_memac.c | 3 ++-
>  drivers/net/ethernet/freescale/fman/fman_tgec.c  | 2 +-
>  3 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c
> b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
> index 004c266..bce3c93 100644
> --- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c
> +++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
> @@ -1200,7 +1200,7 @@ int dtsec_del_hash_mac_address(struct fman_mac
> *dtsec, enet_addr_t *eth_addr)
>  		list_for_each(pos,
>  			      &dtsec->multicast_addr_hash->lsts[bucket]) {
>  			hash_entry = ETH_HASH_ENTRY_OBJ(pos);
> -			if (hash_entry->addr == addr) {
> +			if (hash_entry && hash_entry->addr == addr) {
>  				list_del_init(&hash_entry->node);
>  				kfree(hash_entry);
>  				break;
> @@ -1213,7 +1213,7 @@ int dtsec_del_hash_mac_address(struct fman_mac
> *dtsec, enet_addr_t *eth_addr)
>  		list_for_each(pos,
>  			      &dtsec->unicast_addr_hash->lsts[bucket]) {
>  			hash_entry = ETH_HASH_ENTRY_OBJ(pos);
> -			if (hash_entry->addr == addr) {
> +			if (hash_entry && hash_entry->addr == addr) {
>  				list_del_init(&hash_entry->node);
>  				kfree(hash_entry);
>  				break;
> diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c
> b/drivers/net/ethernet/freescale/fman/fman_memac.c
> index bb02b37..52ee982 100644
> --- a/drivers/net/ethernet/freescale/fman/fman_memac.c
> +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
> @@ -852,6 +852,7 @@ int memac_set_tx_pause_frames(struct fman_mac *memac,
> u8 priority,
> 
>  	tmp = ioread32be(&regs->command_config);
>  	tmp &= ~CMD_CFG_PFC_MODE;
> +	priority = 0;

This line seems to be added by mistake.

> 
>  	iowrite32be(tmp, &regs->command_config);
> 
> @@ -981,7 +982,7 @@ int memac_del_hash_mac_address(struct fman_mac *memac,
> enet_addr_t *eth_addr)
> 
>  	list_for_each(pos, &memac->multicast_addr_hash->lsts[hash]) {
>  		hash_entry = ETH_HASH_ENTRY_OBJ(pos);
> -		if (hash_entry->addr == addr) {
> +		if (hash_entry && hash_entry->addr == addr) {
>  			list_del_init(&hash_entry->node);
>  			kfree(hash_entry);
>  			break;
> diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c
> b/drivers/net/ethernet/freescale/fman/fman_tgec.c
> index 8c7eb87..41946b1 100644
> --- a/drivers/net/ethernet/freescale/fman/fman_tgec.c
> +++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c
> @@ -626,7 +626,7 @@ int tgec_del_hash_mac_address(struct fman_mac *tgec,
> enet_addr_t *eth_addr)
> 
>  	list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) {
>  		hash_entry = ETH_HASH_ENTRY_OBJ(pos);
> -		if (hash_entry->addr == addr) {
> +		if (hash_entry && hash_entry->addr == addr) {
>  			list_del_init(&hash_entry->node);
>  			kfree(hash_entry);
>  			break;
> --
> 1.9.1
diff mbox series

Patch

diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
index 004c266..bce3c93 100644
--- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c
+++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c
@@ -1200,7 +1200,7 @@  int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr)
 		list_for_each(pos,
 			      &dtsec->multicast_addr_hash->lsts[bucket]) {
 			hash_entry = ETH_HASH_ENTRY_OBJ(pos);
-			if (hash_entry->addr == addr) {
+			if (hash_entry && hash_entry->addr == addr) {
 				list_del_init(&hash_entry->node);
 				kfree(hash_entry);
 				break;
@@ -1213,7 +1213,7 @@  int dtsec_del_hash_mac_address(struct fman_mac *dtsec, enet_addr_t *eth_addr)
 		list_for_each(pos,
 			      &dtsec->unicast_addr_hash->lsts[bucket]) {
 			hash_entry = ETH_HASH_ENTRY_OBJ(pos);
-			if (hash_entry->addr == addr) {
+			if (hash_entry && hash_entry->addr == addr) {
 				list_del_init(&hash_entry->node);
 				kfree(hash_entry);
 				break;
diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
index bb02b37..52ee982 100644
--- a/drivers/net/ethernet/freescale/fman/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
@@ -852,6 +852,7 @@  int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority,
 
 	tmp = ioread32be(&regs->command_config);
 	tmp &= ~CMD_CFG_PFC_MODE;
+	priority = 0;
 
 	iowrite32be(tmp, &regs->command_config);
 
@@ -981,7 +982,7 @@  int memac_del_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr)
 
 	list_for_each(pos, &memac->multicast_addr_hash->lsts[hash]) {
 		hash_entry = ETH_HASH_ENTRY_OBJ(pos);
-		if (hash_entry->addr == addr) {
+		if (hash_entry && hash_entry->addr == addr) {
 			list_del_init(&hash_entry->node);
 			kfree(hash_entry);
 			break;
diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c b/drivers/net/ethernet/freescale/fman/fman_tgec.c
index 8c7eb87..41946b1 100644
--- a/drivers/net/ethernet/freescale/fman/fman_tgec.c
+++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c
@@ -626,7 +626,7 @@  int tgec_del_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr)
 
 	list_for_each(pos, &tgec->multicast_addr_hash->lsts[hash]) {
 		hash_entry = ETH_HASH_ENTRY_OBJ(pos);
-		if (hash_entry->addr == addr) {
+		if (hash_entry && hash_entry->addr == addr) {
 			list_del_init(&hash_entry->node);
 			kfree(hash_entry);
 			break;