diff options
author | YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> | 2013-03-08 02:43:37 +0100 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2013-03-13 16:11:12 +0100 |
commit | d9d2b484e0006d51591c3b9594e9d5f73b1a8d08 (patch) | |
tree | ce076901eeff4238b45642c0b8add6774fa9ac66 /drivers/firewire | |
parent | firewire net: Omit checking dev->broadcast_rcv_context in fwnet_broadcast_sta... (diff) | |
download | linux-d9d2b484e0006d51591c3b9594e9d5f73b1a8d08.tar.xz linux-d9d2b484e0006d51591c3b9594e9d5f73b1a8d08.zip |
firewire net: Fix leakage of kmap for broadcast receive buffer.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire')
-rw-r--r-- | drivers/firewire/net.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c index d8cb6ac31044..0dc2fdf00562 100644 --- a/drivers/firewire/net.c +++ b/drivers/firewire/net.c @@ -1228,6 +1228,8 @@ static int fwnet_broadcast_start(struct fwnet_device *dev) failed_rcv_queue: kfree(dev->broadcast_rcv_buffer_ptrs); dev->broadcast_rcv_buffer_ptrs = NULL; + for (u = 0; u < FWNET_ISO_PAGE_COUNT; u++) + kunmap(dev->broadcast_rcv_buffer.pages[u]); failed_ptrs_alloc: fw_iso_buffer_destroy(&dev->broadcast_rcv_buffer, dev->card); failed_buffer_init: @@ -1620,10 +1622,15 @@ static int fwnet_remove(struct device *_dev) fwnet_fifo_stop(dev); if (dev->broadcast_rcv_context) { + unsigned u; + fw_iso_context_stop(dev->broadcast_rcv_context); kfree(dev->broadcast_rcv_buffer_ptrs); dev->broadcast_rcv_buffer_ptrs = NULL; + for (u = 0; u < FWNET_ISO_PAGE_COUNT; u++) + kunmap(dev->broadcast_rcv_buffer.pages[u]); + fw_iso_buffer_destroy(&dev->broadcast_rcv_buffer, dev->card); fw_iso_context_destroy(dev->broadcast_rcv_context); |