| From f349405f44f38e27e81145018b6bb113d8bfe500 Mon Sep 17 00:00:00 2001 |
| From: Florinel Iordache <florinel.iordache@nxp.com> |
| Date: Mon, 3 Aug 2020 10:07:33 +0300 |
| Subject: [PATCH] fsl/fman: check dereferencing null pointer |
| |
| commit cc5d229a122106733a85c279d89d7703f21e4d4f upstream. |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c |
| index 1ca543ac8f2c..d2de9ea80c43 100644 |
| --- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c |
| +++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c |
| @@ -1205,7 +1205,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; |
| @@ -1218,7 +1218,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 08f8b36779ea..9088b4f4b4b8 100644 |
| --- a/drivers/net/ethernet/freescale/fman/fman_memac.c |
| +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c |
| @@ -985,7 +985,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 f75b9c11b2d2..ac5a281e0ec3 100644 |
| --- a/drivers/net/ethernet/freescale/fman/fman_tgec.c |
| +++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c |
| @@ -630,7 +630,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.27.0 |
| |