diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2016-12-23 10:01:08 -0500 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2017-01-10 05:53:00 -0500 |
commit | 19a91dd4e39e755d650444da7f3a571b40a11093 (patch) | |
tree | eb07f9ad51e0b4dc6a66a35a001f259ca02ad646 | |
parent | a121103c922847ba5010819a3f250f1f7fc84ab8 (diff) |
MMC: meson: avoid possible NULL dereference
No actual segmentation faults were observed but the coding is
at least inconsistent.
irqreturn_t meson_mmc_irq():
We should not dereference host before checking it.
meson_mmc_irq_thread():
If cmd or mrq are NULL we should not dereference them after
writing a warning.
Fixes: 51c5d8447bd7 MMC: meson: initial support for GX platforms
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Acked-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r-- | drivers/mmc/host/meson-gx-mmc.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c index b352760c041e..09739352834c 100644 --- a/drivers/mmc/host/meson-gx-mmc.c +++ b/drivers/mmc/host/meson-gx-mmc.c | |||
@@ -578,13 +578,15 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id) | |||
578 | { | 578 | { |
579 | struct meson_host *host = dev_id; | 579 | struct meson_host *host = dev_id; |
580 | struct mmc_request *mrq; | 580 | struct mmc_request *mrq; |
581 | struct mmc_command *cmd = host->cmd; | 581 | struct mmc_command *cmd; |
582 | u32 irq_en, status, raw_status; | 582 | u32 irq_en, status, raw_status; |
583 | irqreturn_t ret = IRQ_HANDLED; | 583 | irqreturn_t ret = IRQ_HANDLED; |
584 | 584 | ||
585 | if (WARN_ON(!host)) | 585 | if (WARN_ON(!host)) |
586 | return IRQ_NONE; | 586 | return IRQ_NONE; |
587 | 587 | ||
588 | cmd = host->cmd; | ||
589 | |||
588 | mrq = host->mrq; | 590 | mrq = host->mrq; |
589 | 591 | ||
590 | if (WARN_ON(!mrq)) | 592 | if (WARN_ON(!mrq)) |
@@ -670,10 +672,10 @@ static irqreturn_t meson_mmc_irq_thread(int irq, void *dev_id) | |||
670 | int ret = IRQ_HANDLED; | 672 | int ret = IRQ_HANDLED; |
671 | 673 | ||
672 | if (WARN_ON(!mrq)) | 674 | if (WARN_ON(!mrq)) |
673 | ret = IRQ_NONE; | 675 | return IRQ_NONE; |
674 | 676 | ||
675 | if (WARN_ON(!cmd)) | 677 | if (WARN_ON(!cmd)) |
676 | ret = IRQ_NONE; | 678 | return IRQ_NONE; |
677 | 679 | ||
678 | data = cmd->data; | 680 | data = cmd->data; |
679 | if (data) { | 681 | if (data) { |