pinctrl: freescale: imx: fix bogus check of of_iomap() return value
authorVladimir Zapolskiy <vz@mleia.com>
Wed, 9 Mar 2016 00:45:36 +0000 (02:45 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 30 Mar 2016 08:57:52 +0000 (10:57 +0200)
On error path of_iomap() returns NULL, hence IS_ERR() check is invalid
and may cause a NULL pointer dereference, the change fixes this
problem.

While we are here invert a device node check to simplify the code.

Fixes: 26d8cde5260b ("pinctrl: freescale: imx: add shared input select reg support")
Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
Acked-by: Shawn Guo <shawnguo@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/freescale/pinctrl-imx.c

index 46210512d8ecff75cac22f306928798af8436454..9cfa544072b5a357251889328e2bff7e576ed88c 100644 (file)
@@ -762,19 +762,18 @@ int imx_pinctrl_probe(struct platform_device *pdev,
 
        if (of_property_read_bool(dev_np, "fsl,input-sel")) {
                np = of_parse_phandle(dev_np, "fsl,input-sel", 0);
-               if (np) {
-                       ipctl->input_sel_base = of_iomap(np, 0);
-                       if (IS_ERR(ipctl->input_sel_base)) {
-                               of_node_put(np);
-                               dev_err(&pdev->dev,
-                                       "iomuxc input select base address not found\n");
-                               return PTR_ERR(ipctl->input_sel_base);
-                       }
-               } else {
+               if (!np) {
                        dev_err(&pdev->dev, "iomuxc fsl,input-sel property not found\n");
                        return -EINVAL;
                }
+
+               ipctl->input_sel_base = of_iomap(np, 0);
                of_node_put(np);
+               if (!ipctl->input_sel_base) {
+                       dev_err(&pdev->dev,
+                               "iomuxc input select base address not found\n");
+                       return -ENOMEM;
+               }
        }
 
        imx_pinctrl_desc.name = dev_name(&pdev->dev);