aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2014-03-09 01:11:10 -0500
committerMark Brown <broonie@linaro.org>2014-03-10 12:06:45 -0400
commit2271cf124a2763b7252887814a7fc8a844767e8f (patch)
tree2aa554da7a1af8000ac7c5c594123f1b6de0b5b7
parent2aa237f4a1a72813f9684a0ce6e48288e75de479 (diff)
spi: coldfire-qspi: Prevent NULL pointer dereference
If pdata->cs_control is NULL, we will hit NULL pointer dereference in mcfqspi_cs_select() and mcfqspi_cs_deselect(). Thus add NULL test for pdata->cs_control in probe(). Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--drivers/spi/spi-coldfire-qspi.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/spi/spi-coldfire-qspi.c b/drivers/spi/spi-coldfire-qspi.c
index 94d817523d5f..6d78f96bdc55 100644
--- a/drivers/spi/spi-coldfire-qspi.c
+++ b/drivers/spi/spi-coldfire-qspi.c
@@ -133,13 +133,13 @@ static void mcfqspi_cs_deselect(struct mcfqspi *mcfqspi, u8 chip_select,
133 133
134static int mcfqspi_cs_setup(struct mcfqspi *mcfqspi) 134static int mcfqspi_cs_setup(struct mcfqspi *mcfqspi)
135{ 135{
136 return (mcfqspi->cs_control && mcfqspi->cs_control->setup) ? 136 return (mcfqspi->cs_control->setup) ?
137 mcfqspi->cs_control->setup(mcfqspi->cs_control) : 0; 137 mcfqspi->cs_control->setup(mcfqspi->cs_control) : 0;
138} 138}
139 139
140static void mcfqspi_cs_teardown(struct mcfqspi *mcfqspi) 140static void mcfqspi_cs_teardown(struct mcfqspi *mcfqspi)
141{ 141{
142 if (mcfqspi->cs_control && mcfqspi->cs_control->teardown) 142 if (mcfqspi->cs_control->teardown)
143 mcfqspi->cs_control->teardown(mcfqspi->cs_control); 143 mcfqspi->cs_control->teardown(mcfqspi->cs_control);
144} 144}
145 145
@@ -372,6 +372,11 @@ static int mcfqspi_probe(struct platform_device *pdev)
372 return -ENOENT; 372 return -ENOENT;
373 } 373 }
374 374
375 if (!pdata->cs_control) {
376 dev_dbg(&pdev->dev, "pdata->cs_control is NULL\n");
377 return -EINVAL;
378 }
379
375 master = spi_alloc_master(&pdev->dev, sizeof(*mcfqspi)); 380 master = spi_alloc_master(&pdev->dev, sizeof(*mcfqspi));
376 if (master == NULL) { 381 if (master == NULL) {
377 dev_dbg(&pdev->dev, "spi_alloc_master failed\n"); 382 dev_dbg(&pdev->dev, "spi_alloc_master failed\n");