ucc_geth: Fix IO memory (un)mapping code
Subsystems (2)
PATCH 5/6 ucc_geth: Fix IO memory (un)mapping code
The driver doesn't check ioremap() return value, and doesn't free the remapped memory.
This patch fixes it.
Signed-off-by Anton Vorontsov <[email protected]>
--- drivers/net/ucc_geth.c | 15 ++++++++++++--- 1 files changed, 12 insertions(+), 3 deletions(-)
drivers/net/ucc_geth.c +12 -3
@@ -2218,7 +2218,10 @@ static void ucc_geth_memclean(struct ucc_geth_private *ugeth)while (!list_empty (&ugeth->ind_hash_q))put_enet_addr_container (ENET_ADDR_CONT_ENTRY (dequeue (&ugeth->ind_hash_q))); - +if (ugeth->ug_regs) { +iounmap (ugeth->ug_regs); + ugeth->ug_regs =NULL ; + } }static void ucc_geth_set_multi (struct net_device *dev)
@@ -2423,7 +2426,12 @@ static int ucc_struct_init(struct ucc_geth_private *ugeth)return -ENOMEM ; } - ugeth->ug_regs = (struct ucc_geth __iomem *)ioremap (uf_info->regs,sizeof (struct ucc_geth )); + ugeth->ug_regs =ioremap (uf_info->regs,sizeof (*ugeth->ug_regs)); +if (!ugeth->ug_regs) { +if (netif_msg_probe (ugeth)) +ugeth_err ("%s: Failed to ioremap regs." , __func__); +return -ENOMEM ; + }return 0 ; }
@@ -3691,7 +3699,7 @@ static int ucc_geth_open(struct net_device *dev)if (err) {if (netif_msg_ifup (ugeth))ugeth_err ("%s: Cannot configure internal struct, aborting." , dev->name); -return err; + goto out_err_stop; }napi_enable (&ugeth->napi);
@@ -3754,6 +3762,7 @@ static int ucc_geth_open(struct net_device *dev) out_err:napi_disable (&ugeth->napi); +out_err_stop:ucc_geth_stop (ugeth);return err; }
Signature · 1 line
1.5.6.5