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