Message ID | 20201004131931.29782-1-trix@redhat.com |
---|---|
State | New |
Headers | show |
Series | wireless: mwifiex: fix double free | expand |
On Sun, Oct 4, 2020 at 6:19 AM <trix@redhat.com> wrote: > > From: Tom Rix <trix@redhat.com> > > clang static analysis reports this problem: > > sdio.c:2403:3: warning: Attempt to free released memory > kfree(card->mpa_rx.buf); > ^~~~~~~~~~~~~~~~~~~~~~~ That's some interesting static analysis for a compiler. > When mwifiex_init_sdio() fails in its first call to > mwifiex_alloc_sdio_mpa_buffer, it falls back to calling it > again. If the second alloc of mpa_tx.buf fails, the error > handler will try to free the old, previously freed mpa_rx.buf. > Reviewing the code, it looks like a second double free would > happen with mwifiex_cleanup_sdio(). > > So set both pointers to NULL when they are freed. > > Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver") > Signed-off-by: Tom Rix <trix@redhat.com> For whatever it's worth: Reviewed-by: Brian Norris <briannorris@chromium.org>
trix@redhat.com wrote: > From: Tom Rix <trix@redhat.com> > > clang static analysis reports this problem: > > sdio.c:2403:3: warning: Attempt to free released memory > kfree(card->mpa_rx.buf); > ^~~~~~~~~~~~~~~~~~~~~~~ > > When mwifiex_init_sdio() fails in its first call to > mwifiex_alloc_sdio_mpa_buffer, it falls back to calling it > again. If the second alloc of mpa_tx.buf fails, the error > handler will try to free the old, previously freed mpa_rx.buf. > Reviewing the code, it looks like a second double free would > happen with mwifiex_cleanup_sdio(). > > So set both pointers to NULL when they are freed. > > Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver") > Signed-off-by: Tom Rix <trix@redhat.com> > Reviewed-by: Brian Norris <briannorris@chromium.org> Patch applied to wireless-drivers-next.git, thanks. 53708f4fd9cf mwifiex: fix double free
diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c index 69911c728eb1..bde9e4bbfffe 100644 --- a/drivers/net/wireless/marvell/mwifiex/sdio.c +++ b/drivers/net/wireless/marvell/mwifiex/sdio.c @@ -2403,6 +2403,8 @@ static int mwifiex_alloc_sdio_mpa_buffers(struct mwifiex_adapter *adapter, kfree(card->mpa_rx.buf); card->mpa_tx.buf_size = 0; card->mpa_rx.buf_size = 0; + card->mpa_tx.buf = NULL; + card->mpa_rx.buf = NULL; } return ret;