On Wed, Jun 13, 2018 at 10:06:16PM +0200, Paul Menzel wrote: > Dear Guenter, > > > Am 13.06.2018 um 17:10 schrieb Guenter Roeck: > >Commit cc66b3038254 ("hwmon: (nct6775) Rework temperature source and label > >handling") changed a loop limit from "data->temp_label_num - 1" to "32", > >as part of moving from a string array to a bit mask. This results in the > >following error, reported by UBSAN. > > > >UBSAN: Undefined behaviour in drivers/hwmon/nct6775.c:4179:27 > >shift exponent 32 is too large for 32-bit type 'long unsigned int' > > > >Similar to the original loop, the limit has to be one less than the > >number of bits. > > > >Fixes: cc66b3038254 ("hwmon: (nct6775) Rework temperature source and label handling") > >Reported-by: Paul Menzel <pmenzel+linux-hwmon@xxxxxxxxxxxxx> > >Cc: Paul Menzel <pmenzel+linux-hwmon@xxxxxxxxxxxxx> > >Signed-off-by: Guenter Roeck <linux@xxxxxxxxxxxx> > >--- > > drivers/hwmon/nct6775.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > >diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c > >index aebce560bfaf..b14eb73bc3c9 100644 > >--- a/drivers/hwmon/nct6775.c > >+++ b/drivers/hwmon/nct6775.c > >@@ -4175,7 +4175,7 @@ static int nct6775_probe(struct platform_device *pdev) > > * The temperature is already monitored if the respective bit in <mask> > > * is set. > > */ > >- for (i = 0; i < 32; i++) { > >+ for (i = 0; i < 31; i++) { > > if (!(data->temp_mask & BIT(i + 1))) > > continue; > > if (!reg_temp_alternate[i]) > > Thank you for the patch. I tested that the UBSAN message is gone, and that > the module loads. > > Tested-by: Paul Menzel <pmenzel+linux-hwmon@xxxxxxxxxxxxx> > Thanks! Guenter -- To unsubscribe from this list: send the line "unsubscribe linux-hwmon" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html