linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/6 Revised] SPI omap2_mcspi.c: Check params before dereference or use
@ 2010-03-12 15:11 Scott Ellis
  2010-05-22  9:39 ` Grant Likely
  0 siblings, 1 reply; 4+ messages in thread
From: Scott Ellis @ 2010-03-12 15:11 UTC (permalink / raw)
  To: spi-devel-general
  Cc: David Brownell, Grant Likely, Andrew Morton, Tony Lindgren,
	Kevin Hilman, Aaro Koskinen, Roman Tereshonkov, linux-omap

This was previously submitted directly to the linux-kernel list.
It was incomplete the first time because it failed to also check
the chip_select value.

Check spi->controller_state before dereference.
Check spi->chip_select for range before use.

Neither are necessarily valid after spi_alloc_device() and 
then spi_add_device() fails. Calling spi_put_device() will 
trigger the error.

Signed-off-by: Scott Ellis <scott@jumpnowtek.com>

 drivers/spi/omap2_mcspi.c |   30 +++++++++++++++++-------------
 1 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
index 715c518..fe1b56d 100644
--- a/drivers/spi/omap2_mcspi.c
+++ b/drivers/spi/omap2_mcspi.c
@@ -748,22 +748,26 @@ static void omap2_mcspi_cleanup(struct spi_device *spi)
 	struct omap2_mcspi_dma	*mcspi_dma;
 	struct omap2_mcspi_cs	*cs;
 
-	mcspi = spi_master_get_devdata(spi->master);
-	mcspi_dma = &mcspi->dma_channels[spi->chip_select];
+	if (spi->controller_state) {
+		/* Unlink controller state from context save list */
+		cs = spi->controller_state;
+		list_del(&cs->node);
 
-	/* Unlink controller state from context save list */
-	cs = spi->controller_state;
-	list_del(&cs->node);
+		kfree(spi->controller_state);
+	}
 
-	kfree(spi->controller_state);
+	if (spi->chip_select < spi->master->num_chipselect) {
+		mcspi = spi_master_get_devdata(spi->master);
+		mcspi_dma = &mcspi->dma_channels[spi->chip_select];
 
-	if (mcspi_dma->dma_rx_channel != -1) {
-		omap_free_dma(mcspi_dma->dma_rx_channel);
-		mcspi_dma->dma_rx_channel = -1;
-	}
-	if (mcspi_dma->dma_tx_channel != -1) {
-		omap_free_dma(mcspi_dma->dma_tx_channel);
-		mcspi_dma->dma_tx_channel = -1;
+		if (mcspi_dma->dma_rx_channel != -1) {
+			omap_free_dma(mcspi_dma->dma_rx_channel);
+			mcspi_dma->dma_rx_channel = -1;
+		}
+		if (mcspi_dma->dma_tx_channel != -1) {
+			omap_free_dma(mcspi_dma->dma_tx_channel);
+			mcspi_dma->dma_tx_channel = -1;
+		}
 	}
 }










^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-05-25  6:28 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-12 15:11 [PATCH 1/6 Revised] SPI omap2_mcspi.c: Check params before dereference or use Scott Ellis
2010-05-22  9:39 ` Grant Likely
     [not found]   ` <AANLkTikCydr_Nj446sySru774pY2jXLKNUNVfW3LSK9R-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-05-24 14:20     ` [PATCHv3 1/6] " Scott Ellis
2010-05-25  6:28       ` Grant Likely

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).