2009-03-23 22:25:04

by Luis R. Rodriguez

[permalink] [raw]
Subject: [PATCH v2] ath9k: fix dma mapping leak of rx buffer upon rmmod

We were claiming DMA buffers on the RX tasklet but never
upon a simple module removal.

Cc: [email protected]
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Luis R. Rodriguez <[email protected]>
---

Sorry, forgot to CC stable

drivers/net/wireless/ath9k/recv.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/ath9k/recv.c b/drivers/net/wireless/ath9k/recv.c
index 917bac7..71cb18d 100644
--- a/drivers/net/wireless/ath9k/recv.c
+++ b/drivers/net/wireless/ath9k/recv.c
@@ -344,8 +344,13 @@ void ath_rx_cleanup(struct ath_softc *sc)

list_for_each_entry(bf, &sc->rx.rxbuf, list) {
skb = bf->bf_mpdu;
- if (skb)
+ if (skb) {
+ dma_unmap_single(sc->dev,
+ bf->bf_buf_addr,
+ sc->rx.bufsize,
+ DMA_FROM_DEVICE);
dev_kfree_skb(skb);
+ }
}

if (sc->rx.rxdma.dd_desc_len != 0)
--
1.5.6.4



2009-03-24 00:52:48

by FUJITA Tomonori

[permalink] [raw]
Subject: Re: [PATCH v2] ath9k: fix dma mapping leak of rx buffer upon rmmod

On Mon, 23 Mar 2009 18:25:01 -0400
"Luis R. Rodriguez" <[email protected]> wrote:

> We were claiming DMA buffers on the RX tasklet but never
> upon a simple module removal.
>
> Cc: [email protected]
> Signed-off-by: FUJITA Tomonori <[email protected]>
> Signed-off-by: Luis R. Rodriguez <[email protected]>
> ---
>
> Sorry, forgot to CC stable
>
> drivers/net/wireless/ath9k/recv.c | 7 ++++++-
> 1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/wireless/ath9k/recv.c b/drivers/net/wireless/ath9k/recv.c
> index 917bac7..71cb18d 100644
> --- a/drivers/net/wireless/ath9k/recv.c
> +++ b/drivers/net/wireless/ath9k/recv.c
> @@ -344,8 +344,13 @@ void ath_rx_cleanup(struct ath_softc *sc)
>
> list_for_each_entry(bf, &sc->rx.rxbuf, list) {
> skb = bf->bf_mpdu;
> - if (skb)
> + if (skb) {
> + dma_unmap_single(sc->dev,
> + bf->bf_buf_addr,
> + sc->rx.bufsize,
> + DMA_FROM_DEVICE);
> dev_kfree_skb(skb);
> + }
> }

ath9k uses pci_map/unmap_* families so using dma_map/unmap looks
inconsistent. It works though.

I think that my original patch is fine:

http://marc.info/?l=linux-kernel&m=123725029228065&w=2

2009-03-24 00:32:27

by Luis R. Rodriguez

[permalink] [raw]
Subject: Re: [PATCH v2] ath9k: fix dma mapping leak of rx buffer upon rmmod

On Mon, Mar 23, 2009 at 05:21:28PM -0700, FUJITA Tomonori wrote:
> On Mon, 23 Mar 2009 18:25:01 -0400
> "Luis R. Rodriguez" <[email protected]> wrote:
>
> > We were claiming DMA buffers on the RX tasklet but never
> > upon a simple module removal.
> >
> > Cc: [email protected]
> > Signed-off-by: FUJITA Tomonori <[email protected]>
> > Signed-off-by: Luis R. Rodriguez <[email protected]>
> > ---
> >
> > Sorry, forgot to CC stable
> >
> > drivers/net/wireless/ath9k/recv.c | 7 ++++++-
> > 1 files changed, 6 insertions(+), 1 deletions(-)
> >
> > diff --git a/drivers/net/wireless/ath9k/recv.c b/drivers/net/wireless/ath9k/recv.c
> > index 917bac7..71cb18d 100644
> > --- a/drivers/net/wireless/ath9k/recv.c
> > +++ b/drivers/net/wireless/ath9k/recv.c
> > @@ -344,8 +344,13 @@ void ath_rx_cleanup(struct ath_softc *sc)
> >
> > list_for_each_entry(bf, &sc->rx.rxbuf, list) {
> > skb = bf->bf_mpdu;
> > - if (skb)
> > + if (skb) {
> > + dma_unmap_single(sc->dev,
> > + bf->bf_buf_addr,
> > + sc->rx.bufsize,
> > + DMA_FROM_DEVICE);
> > dev_kfree_skb(skb);
> > + }
> > }
>
> ath9k uses pci_map/unmap_* families so using dma_map/unmap looks
> inconsistent. It works though.
>
> I think that my original patch is fine:
>
> http://marc.info/?l=linux-kernel&m=123725029228065&w=2

Noted -- the ported patch for 2.6.29 will use pci_unmap_single() however
this patch was for 2.6.30 where we now have bus-agnostic routines. To
get a better idea of how this looks feel free to check out ath9k from
the wireless-testing git tree.

git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git

Luis