diff options
author | Axel Lin <axel.lin@ingics.com> | 2014-03-09 01:11:10 -0500 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-03-10 12:06:45 -0400 |
commit | 2271cf124a2763b7252887814a7fc8a844767e8f (patch) | |
tree | 2aa554da7a1af8000ac7c5c594123f1b6de0b5b7 | |
parent | 2aa237f4a1a72813f9684a0ce6e48288e75de479 (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.c | 9 |
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 | ||
134 | static int mcfqspi_cs_setup(struct mcfqspi *mcfqspi) | 134 | static 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 | ||
140 | static void mcfqspi_cs_teardown(struct mcfqspi *mcfqspi) | 140 | static 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"); |