From caa43300085ea28074a14dcb215405bc52d070a9 Mon Sep 17 00:00:00 2001 From: Joonwoo Park <joonwoop@codeaurora.org> Date: Wed, 6 Aug 2014 14:03:05 -0700 Subject: [PATCH] pinctrl: msm: fix potential NULL pointer dereference Fix potential NULL pointer dereference with NULL checks. Change-Id: Ic04209d46dcfe32489d873ee3275f4c5c54bceb3 Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org> --- drivers/pinctrl/pinctrl-msm-tlmm.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/pinctrl/pinctrl-msm-tlmm.c b/drivers/pinctrl/pinctrl-msm-tlmm.c index fe0e029c1956..61c3b130e86c 100644 --- a/drivers/pinctrl/pinctrl-msm-tlmm.c +++ b/drivers/pinctrl/pinctrl-msm-tlmm.c @@ -576,11 +576,15 @@ static irqreturn_t msm_tlmm_gp_handle_irq(int irq, struct msm_tlmm_irq_chip *ic) { unsigned long i; unsigned int virq = 0; + struct irq_chip *chip; struct irq_desc *desc = irq_to_desc(irq); - struct irq_chip *chip = irq_desc_get_chip(desc); struct msm_pintype_info *pinfo = ic_to_pintype(ic); struct gpio_chip *gc = pintype_get_gc(pinfo); + if (unlikely(!desc)) + return IRQ_HANDLED; + + chip = irq_desc_get_chip(desc); chained_irq_enter(chip, desc); for_each_set_bit(i, ic->enabled_irqs, ic->num_irqs) { @@ -956,6 +960,8 @@ static int msm_tlmm_probe(struct platform_device *pdev) match = of_match_node(msm_tlmm_dt_match, node); if (IS_ERR(match)) return PTR_ERR(match); + else if (!match) + return -ENODEV; tlmm_desc = devm_kzalloc(&pdev->dev, sizeof(*tlmm_desc), GFP_KERNEL); if (!tlmm_desc) { dev_err(&pdev->dev, "Alloction failed for tlmm desc\n"); -- GitLab