drivers/hwmon/smsc47m1.c:373:53: warning: array subscript [0, 2] is outside array bounds of 'const u8[3]' {aka 'const unsigned char[3]'}

From: kbuild test robot
Date: Mon May 20 2019 - 07:16:09 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: a188339ca5a396acc588e5851ed7e19f66b0ebd9
commit: 9012d011660ea5cf2a623e1de207a2bc0ca6936d compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING
date: 5 days ago
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 8.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 9012d011660ea5cf2a623e1de207a2bc0ca6936d
# save the attached .config to linux build tree
GCC_VERSION=8.1.0 make.cross ARCH=sh

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

drivers/hwmon/smsc47m1.c: In function 'fan_div_store':
drivers/hwmon/smsc47m1.c:370:49: warning: array subscript [0, 2] is outside array bounds of 'u8[3]' {aka 'unsigned char[3]'} [-Warray-bounds]
tmp = 192 - (old_div * (192 - data->fan_preload[nr])
~~~~~~~~~~~~~~~~~^~~~
drivers/hwmon/smsc47m1.c:372:19: warning: array subscript [0, 2] is outside array bounds of 'u8[3]' {aka 'unsigned char[3]'} [-Warray-bounds]
data->fan_preload[nr] = clamp_val(tmp, 0, 191);
~~~~~~~~~~~~~~~~~^~~~
>> drivers/hwmon/smsc47m1.c:373:53: warning: array subscript [0, 2] is outside array bounds of 'const u8[3]' {aka 'const unsigned char[3]'} [-Warray-bounds]
smsc47m1_write_value(data, SMSC47M1_REG_FAN_PRELOAD[nr],
~~~~~~~~~~~~~~~~~~~~~~~~^~~~

vim +373 drivers/hwmon/smsc47m1.c

^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 309
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 310 /*
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 311 * Note: we save and restore the fan minimum here, because its value is
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 312 * determined in part by the fan clock divider. This follows the principle
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 313 * of least surprise; the user doesn't expect the fan minimum to change just
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 314 * because the divider changed.
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 315 */
96c6f81a drivers/hwmon/smsc47m1.c Guenter Roeck 2019-01-22 316 static ssize_t fan_div_store(struct device *dev,
96c6f81a drivers/hwmon/smsc47m1.c Guenter Roeck 2019-01-22 317 struct device_attribute *devattr,
96c6f81a drivers/hwmon/smsc47m1.c Guenter Roeck 2019-01-22 318 const char *buf, size_t count)
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 319 {
e84cfbcb drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 320 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
51f2cca1 drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 321 struct smsc47m1_data *data = dev_get_drvdata(dev);
e84cfbcb drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 322 int nr = attr->index;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 323 long new_div;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 324 int err;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 325 long tmp;
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 326 u8 old_div = DIV_FROM_REG(data->fan_div[nr]);
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 327
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 328 err = kstrtol(buf, 10, &new_div);
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 329 if (err)
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 330 return err;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 331
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 332 if (new_div == old_div) /* No change */
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 333 return count;
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 334
9a61bf63 drivers/hwmon/smsc47m1.c Ingo Molnar 2006-01-18 335 mutex_lock(&data->update_lock);
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 336 switch (new_div) {
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 337 case 1:
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 338 data->fan_div[nr] = 0;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 339 break;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 340 case 2:
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 341 data->fan_div[nr] = 1;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 342 break;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 343 case 4:
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 344 data->fan_div[nr] = 2;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 345 break;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 346 case 8:
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 347 data->fan_div[nr] = 3;
85a0c0d1 drivers/hwmon/smsc47m1.c Guenter Roeck 2012-01-14 348 break;
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 349 default:
9a61bf63 drivers/hwmon/smsc47m1.c Ingo Molnar 2006-01-18 350 mutex_unlock(&data->update_lock);
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 351 return -EINVAL;
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 352 }
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 353
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 354 switch (nr) {
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 355 case 0:
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 356 case 1:
51f2cca1 drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 357 tmp = smsc47m1_read_value(data, SMSC47M1_REG_FANDIV)
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 358 & ~(0x03 << (4 + 2 * nr));
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 359 tmp |= data->fan_div[nr] << (4 + 2 * nr);
51f2cca1 drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 360 smsc47m1_write_value(data, SMSC47M1_REG_FANDIV, tmp);
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 361 break;
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 362 case 2:
51f2cca1 drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 363 tmp = smsc47m1_read_value(data, SMSC47M2_REG_FANDIV3) & 0xCF;
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 364 tmp |= data->fan_div[2] << 4;
51f2cca1 drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 365 smsc47m1_write_value(data, SMSC47M2_REG_FANDIV3, tmp);
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 366 break;
8eccbb6f drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 367 }
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 368
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 369 /* Preserve fan min */
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 @370 tmp = 192 - (old_div * (192 - data->fan_preload[nr])
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 371 + new_div / 2) / new_div;
2a844c14 drivers/hwmon/smsc47m1.c Guenter Roeck 2013-01-09 372 data->fan_preload[nr] = clamp_val(tmp, 0, 191);
51f2cca1 drivers/hwmon/smsc47m1.c Jean Delvare 2007-05-08 @373 smsc47m1_write_value(data, SMSC47M1_REG_FAN_PRELOAD[nr],
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 374 data->fan_preload[nr]);
9a61bf63 drivers/hwmon/smsc47m1.c Ingo Molnar 2006-01-18 375 mutex_unlock(&data->update_lock);
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 376
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 377 return count;
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 378 }
^1da177e drivers/i2c/chips/smsc47m1.c Linus Torvalds 2005-04-16 379

:::::: The code at line 373 was first introduced by commit
:::::: 51f2cca1f72db5e272ed79b678b62fb9472e916e hwmon/smsc47m1: Convert to a platform driver

:::::: TO: Jean Delvare <khali@xxxxxxxxxxxx>
:::::: CC: Jean Delvare <khali@xxxxxxxxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip