aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2016-12-23 10:01:08 -0500
committerUlf Hansson <ulf.hansson@linaro.org>2017-01-10 05:53:00 -0500
commit19a91dd4e39e755d650444da7f3a571b40a11093 (patch)
treeeb07f9ad51e0b4dc6a66a35a001f259ca02ad646
parenta121103c922847ba5010819a3f250f1f7fc84ab8 (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.c8
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) {