SoC: mxs-saif: check validity of ids in mxs_saif_probe()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Fri, 14 Oct 2016 21:53:36 +0000 (00:53 +0300)
committerMark Brown <broonie@kernel.org>
Wed, 26 Oct 2016 10:14:32 +0000 (11:14 +0100)
There is a check for validity of one of ids in mxs_saif_probe(),
while array dereferece is made by the other id.

The patch adds the check for the second saif id.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/mxs/mxs-saif.c

index 13631003cb7c6796d49f5278834eb5924aea294c..a002ab892772106bae79532d4836814411eaef2f 100644 (file)
@@ -735,6 +735,11 @@ static int mxs_saif_probe(struct platform_device *pdev)
        else
                saif->id = ret;
 
+       if (saif->id >= ARRAY_SIZE(mxs_saif)) {
+               dev_err(&pdev->dev, "get wrong saif id\n");
+               return -EINVAL;
+       }
+
        /*
         * If there is no "fsl,saif-master" phandle, it's a saif
         * master.  Otherwise, it's a slave and its phandle points
@@ -749,11 +754,11 @@ static int mxs_saif_probe(struct platform_device *pdev)
                        return ret;
                else
                        saif->master_id = ret;
-       }
 
-       if (saif->master_id >= ARRAY_SIZE(mxs_saif)) {
-               dev_err(&pdev->dev, "get wrong master id\n");
-               return -EINVAL;
+               if (saif->master_id >= ARRAY_SIZE(mxs_saif)) {
+                       dev_err(&pdev->dev, "get wrong master id\n");
+                       return -EINVAL;
+               }
        }
 
        mxs_saif[saif->id] = saif;