Commit d06563cb860ab594889010889a7111c9e25d1051
Committed by
Liam Girdwood
1 parent
b9e5d11a7e
Exists in
master
and in
7 other branches
regulator: 88pm8607 - fix value range checking for accessing info->vol_table
In choose_voltage(), we use i as array index of info->vol_table. The valid value range for i should be 0 .. ARRAY_SIZE(info->vol_table) - 1. Take LDO1 as example, ARRAY_SIZE(LDO1_table) is 4, vol_nbits of LDO1 is 2. for (i = 0; i < (2 << info->vol_nbits); i++) is equivalent to for (i = 0; i < 8; i++) which is wrong. The same value range checking also applies for index in pm8607_list_voltage(). Signed-off-by: Axel Lin <axel.lin@gmail.com> Acked-by: Mark Brown <broonie@openource.wolfsonmicro.com> Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
Showing 1 changed file with 2 additions and 2 deletions Side-by-side Diff
drivers/regulator/88pm8607.c
... | ... | @@ -215,7 +215,7 @@ |
215 | 215 | struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); |
216 | 216 | int ret = -EINVAL; |
217 | 217 | |
218 | - if (info->vol_table && (index < (2 << info->vol_nbits))) { | |
218 | + if (info->vol_table && (index < (1 << info->vol_nbits))) { | |
219 | 219 | ret = info->vol_table[index]; |
220 | 220 | if (info->slope_double) |
221 | 221 | ret <<= 1; |
... | ... | @@ -233,7 +233,7 @@ |
233 | 233 | max_uV = max_uV >> 1; |
234 | 234 | } |
235 | 235 | if (info->vol_table) { |
236 | - for (i = 0; i < (2 << info->vol_nbits); i++) { | |
236 | + for (i = 0; i < (1 << info->vol_nbits); i++) { | |
237 | 237 | if (!info->vol_table[i]) |
238 | 238 | break; |
239 | 239 | if ((min_uV <= info->vol_table[i]) |