diff options
author | Scott Ellis <scott@jumpnowtek.com> | 2010-03-10 14:22:45 -0700 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2010-03-10 14:22:45 -0700 |
commit | 5e7749436d576a525d7b2a4bcffb17b3364b9e00 (patch) | |
tree | 1c7e0c67f0e5cdc49f594afd65204d09a3a8a017 /drivers/spi/omap2_mcspi.c | |
parent | 07081fd8587478849b69d7b41596e81ff5a7f532 (diff) | |
download | lwn-5e7749436d576a525d7b2a4bcffb17b3364b9e00.tar.gz lwn-5e7749436d576a525d7b2a4bcffb17b3364b9e00.zip |
spi/omap2_mcspi: fix NULL pointer dereference
Check spi->controller_state before dereferencing.
Shows up NULL here when using spi_alloc_device()/spi_add_device()
and spi_add_device() fails before spi_setup(). Calling spi_dev_put()
on the leftover spi_device results in the error.
Signed-off-by: Scott Ellis <scott@jumpnowtek.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'drivers/spi/omap2_mcspi.c')
-rw-r--r-- | drivers/spi/omap2_mcspi.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index 715c518b1b68..87d44eeaaa7b 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c @@ -751,11 +751,13 @@ static void omap2_mcspi_cleanup(struct spi_device *spi) mcspi = spi_master_get_devdata(spi->master); mcspi_dma = &mcspi->dma_channels[spi->chip_select]; - /* Unlink controller state from context save list */ - cs = spi->controller_state; - list_del(&cs->node); + if (spi->controller_state) { + /* Unlink controller state from context save list */ + cs = spi->controller_state; + list_del(&cs->node); - kfree(spi->controller_state); + kfree(spi->controller_state); + } if (mcspi_dma->dma_rx_channel != -1) { omap_free_dma(mcspi_dma->dma_rx_channel); |