iio: chemical: bme680: Fix overflows in compensate() functions

There are cases in the compensate functions of the driver that
there could be overflows of variables due to bit shifting ops.
These implications were initially discussed here [1] and they
were mentioned in log message of Commit 1b3bd8592780 ("iio:
chemical: Add support for Bosch BME680 sensor").

[1]: https://lore.kernel.org/linux-iio/20180728114028.3c1bbe81@archlinux/

Fixes: 1b3bd8592780 ("iio: chemical: Add support for Bosch BME680 sensor")
Signed-off-by: Vasileios Amoiridis <vassilisamir@gmail.com>
Link: https://lore.kernel.org/r/20240606212313.207550-4-vassilisamir@gmail.com
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by Vasileios Amoiridis and committed by Jonathan Cameron fdd478c3 b47c0fee

+6 -6
+6 -6
drivers/iio/chemical/bme680_core.c
··· 342 342 if (!calib->par_t2) 343 343 bme680_read_calib(data, calib); 344 344 345 - var1 = (adc_temp >> 3) - (calib->par_t1 << 1); 345 + var1 = (adc_temp >> 3) - ((s32)calib->par_t1 << 1); 346 346 var2 = (var1 * calib->par_t2) >> 11; 347 347 var3 = ((var1 >> 1) * (var1 >> 1)) >> 12; 348 - var3 = (var3 * (calib->par_t3 << 4)) >> 14; 348 + var3 = (var3 * ((s32)calib->par_t3 << 4)) >> 14; 349 349 data->t_fine = var2 + var3; 350 350 calc_temp = (data->t_fine * 5 + 128) >> 8; 351 351 ··· 368 368 var1 = (data->t_fine >> 1) - 64000; 369 369 var2 = ((((var1 >> 2) * (var1 >> 2)) >> 11) * calib->par_p6) >> 2; 370 370 var2 = var2 + (var1 * calib->par_p5 << 1); 371 - var2 = (var2 >> 2) + (calib->par_p4 << 16); 371 + var2 = (var2 >> 2) + ((s32)calib->par_p4 << 16); 372 372 var1 = (((((var1 >> 2) * (var1 >> 2)) >> 13) * 373 - (calib->par_p3 << 5)) >> 3) + 373 + ((s32)calib->par_p3 << 5)) >> 3) + 374 374 ((calib->par_p2 * var1) >> 1); 375 375 var1 = var1 >> 18; 376 376 var1 = ((32768 + var1) * calib->par_p1) >> 15; ··· 388 388 var3 = ((press_comp >> 8) * (press_comp >> 8) * 389 389 (press_comp >> 8) * calib->par_p10) >> 17; 390 390 391 - press_comp += (var1 + var2 + var3 + (calib->par_p7 << 7)) >> 4; 391 + press_comp += (var1 + var2 + var3 + ((s32)calib->par_p7 << 7)) >> 4; 392 392 393 393 return press_comp; 394 394 } ··· 414 414 (((temp_scaled * ((temp_scaled * calib->par_h5) / 100)) 415 415 >> 6) / 100) + (1 << 14))) >> 10; 416 416 var3 = var1 * var2; 417 - var4 = calib->par_h6 << 7; 417 + var4 = (s32)calib->par_h6 << 7; 418 418 var4 = (var4 + ((temp_scaled * calib->par_h7) / 100)) >> 4; 419 419 var5 = ((var3 >> 14) * (var3 >> 14)) >> 10; 420 420 var6 = (var4 * var5) >> 1;