Skip to content

Commit

Permalink
ucc_geth: Fix IO memory (un)mapping code
Browse files Browse the repository at this point in the history
The driver doesn't check ioremap() return value, and doesn't free the
remapped memory.

This patch fixes it.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Anton Vorontsov authored and David S. Miller committed Dec 19, 2008
1 parent ba57469 commit 3e73fc9
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions drivers/net/ucc_geth.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -3689,7 +3697,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);
Expand Down Expand Up @@ -3752,6 +3760,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;
}
Expand Down

0 comments on commit 3e73fc9

Please sign in to comment.