]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
staging:iio:ls:cm3217:correct regulator init logic
authorSri Krishna chowdary <schowdary@nvidia.com>
Fri, 18 Oct 2013 11:28:11 +0000 (16:58 +0530)
committerBharat Nihalani <bnihalani@nvidia.com>
Wed, 23 Oct 2013 04:50:29 +0000 (21:50 -0700)
During regulator init, cm3217_vregs is accessed out of range.
This causes kernel panic during shutdown.
Hence, fix the init code.

Bug 1373590

Change-Id: If969b51d0303aaaaea61153e53cc3055fe063486
Signed-off-by: Sri Krishna chowdary <schowdary@nvidia.com>
Reviewed-on: http://git-master/r/301208
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
drivers/staging/iio/light/cm3217.c

index 0c795da455ca5c6dc1e2beb3e49c2fca263ca9b4..3ca2d88ca6ffe216590f44cf021e253d9f113a95 100644 (file)
@@ -197,12 +197,15 @@ static int cm3217_vreg_init(struct cm3217_inf *inf)
        unsigned int i;
        int err = 0;
 
-       /* regulator names in order of powering on */
+       /*
+        * regulator names in order of powering on.
+        * ARRAY_SIZE(cm3217_vregs) must be < CM3217_MAX_REGULATORS
+        */
        char *cm3217_vregs[] = {
                "vdd",
        };
 
-       for (i = 0; i < CM3217_MAX_REGULATORS; i++) {
+       for (i = 0; i < ARRAY_SIZE(cm3217_vregs); i++) {
                inf->vreg[i].supply = cm3217_vregs[i];
                inf->vreg[i].ret = 0;
                inf->vreg[i].consumer = regulator_get(&inf->i2c->dev,
@@ -214,6 +217,8 @@ static int cm3217_vreg_init(struct cm3217_inf *inf)
                        inf->vreg[i].consumer = NULL;
                }
        }
+       for (; i < CM3217_MAX_REGULATORS; i++)
+               inf->vreg[i].consumer = NULL;
        return err;
 }