| From 574fd555b3ef958c0cde2a4dc8f0702ea88c4d77 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 3 Aug 2020 10:07:33 +0300 |
| Subject: fsl/fman: check dereferencing null pointer |
| |
| From: Florinel Iordache <florinel.iordache@nxp.com> |
| |
| [ Upstream commit cc5d229a122106733a85c279d89d7703f21e4d4f ] |
| |
| Add a safe check to avoid dereferencing null pointer |
| |
| Fixes: 57ba4c9b56d8 ("fsl/fman: Add FMan MAC support") |
| Signed-off-by: Florinel Iordache <florinel.iordache@nxp.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/freescale/fman/fman_dtsec.c | 4 ++-- |
| drivers/net/ethernet/freescale/fman/fman_memac.c | 2 +- |
| drivers/net/ethernet/freescale/fman/fman_tgec.c | 2 +- |
| 3 files changed, 4 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c |
| index 004c266802a87..bce3c9398887c 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 bb02b37422cc2..645764abdaae5 100644 |
| --- a/drivers/net/ethernet/freescale/fman/fman_memac.c |
| +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c |
| @@ -981,7 +981,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 8c7eb878d5b43..41946b16f6c72 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; |
| -- |
| 2.25.1 |
| |