OSDN Git Service

pinctrl: qcom: sc8180x: gracefully handle missing IO memory resource
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Sat, 13 May 2023 11:35:10 +0000 (13:35 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 16 May 2023 13:25:57 +0000 (15:25 +0200)
If device was probed with incorrect DT or ACPI tables, the IO memory
resource would be missing and driver would derefernce NULL pointer in
sc8180x_pinctrl_add_tile_resources().  Add simplep check if IO memory
resource was provided to silence Smatch warning:

  drivers/pinctrl/qcom/pinctrl-sc8180x.c:1664 sc8180x_pinctrl_add_tile_resources() error: potentially dereferencing uninitialized 'mres'.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230513113510.177666-1-krzysztof.kozlowski@linaro.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/qcom/pinctrl-sc8180x.c

index f86b176..d6a79ad 100644 (file)
@@ -1622,7 +1622,8 @@ static const struct msm_pinctrl_soc_data sc8180x_acpi_pinctrl = {
 static int sc8180x_pinctrl_add_tile_resources(struct platform_device *pdev)
 {
        int nres_num = pdev->num_resources + ARRAY_SIZE(sc8180x_tiles) - 1;
-       struct resource *mres, *nres, *res;
+       struct resource *mres = NULL;
+       struct resource *nres, *res;
        int i, ret;
 
        /*
@@ -1649,6 +1650,9 @@ static int sc8180x_pinctrl_add_tile_resources(struct platform_device *pdev)
                        *res++ = *r;
        }
 
+       if (!mres)
+               return -EINVAL;
+
        /* Append tile memory resources */
        for (i = 0; i < ARRAY_SIZE(sc8180x_tiles); i++, res++) {
                const struct tile_info *info = &sc8180x_tile_info[i];