aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Neumann <s.neumann@raumfeld.com>2010-11-24 16:02:00 +0000
committerJohn W. Linville <linville@tuxdriver.com>2010-11-29 14:41:27 -0500
commit16ccdf0dbc84b11bc8b7fdbad66804d06a683554 (patch)
tree26911c901e58af22b94c4e0b6539ada0f8194589
parent517ff43146b17a0d067125f098f675d1e0ac2d82 (diff)
downloadkernel_samsung_smdk4412-16ccdf0dbc84b11bc8b7fdbad66804d06a683554.zip
kernel_samsung_smdk4412-16ccdf0dbc84b11bc8b7fdbad66804d06a683554.tar.gz
kernel_samsung_smdk4412-16ccdf0dbc84b11bc8b7fdbad66804d06a683554.tar.bz2
libertas: fix invalid access
card->priv must not be accessed after lbs_remove_card() was called as lbs_remove_card() frees card->priv via free_netdev(). For libertas_sdio this is a regression introduced by 23b149c1890f9. The correct fix to the issue described there is simply to remove the assignment. This flag is set at the appropriate time inside lbs_remove_card anyway. Reported-by: Daniel Drake <dsd@laptop.org> Signed-off-by: Sven Neumann <s.neumann@raumfeld.com> Signed-off-by: Daniel Drake <dsd@laptop.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/libertas/if_sdio.c1
-rw-r--r--drivers/net/wireless/libertas/if_spi.c1
2 files changed, 0 insertions, 2 deletions
diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
index e5685dc..b4de0ca 100644
--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -1170,7 +1170,6 @@ static void if_sdio_remove(struct sdio_func *func)
lbs_deb_sdio("call remove card\n");
lbs_stop_card(card->priv);
lbs_remove_card(card->priv);
- card->priv->surpriseremoved = 1;
flush_workqueue(card->workqueue);
destroy_workqueue(card->workqueue);
diff --git a/drivers/net/wireless/libertas/if_spi.c b/drivers/net/wireless/libertas/if_spi.c
index 79bcb4e..ecd4d04 100644
--- a/drivers/net/wireless/libertas/if_spi.c
+++ b/drivers/net/wireless/libertas/if_spi.c
@@ -1055,7 +1055,6 @@ static int __devexit libertas_spi_remove(struct spi_device *spi)
lbs_stop_card(priv);
lbs_remove_card(priv); /* will call free_netdev */
- priv->surpriseremoved = 1;
free_irq(spi->irq, card);
if_spi_terminate_spi_thread(card);
if (card->pdata->teardown)