Messages in this thread | | | From | Paul Menzel <> | Subject | nct6775: UBSAN: shift exponent 32 is too large for 32-bit type 'long unsigned int' | Date | Tue, 12 Jun 2018 23:50:45 +0200 |
| |
Dear Guenther, dear Jean,
Building Linux with the undefined behavior sanitizer (UBSAN), loading the module *nct6775* on the ASRock E350M1 shows the error below.
``` [ 28.322775] UBSAN: Undefined behaviour in drivers/hwmon/nct6775.c:4179:27 [ 28.322833] shift exponent 32 is too large for 32-bit type 'long unsigned int' ```
I believe this was introduced by commit cc66b3038254 (hwmon: (nct6775) Rework temperature source and label handling), but the same issue was already present before.
``` - for (i = 0; i < data->temp_label_num - 1; i++) { + for (i = 0; i < 32; i++) { + if (!(data->temp_mask & BIT(i + 1))) + continue; ```
`include/linux/bitops.h` has the macros below.
``` #define BIT(nr) (1UL << (nr)) #define BIT_ULL(nr) (1ULL << (nr)) ```
Maybe `BIT_ULL` should be used, but I do not know, if that’d would work with `data->temp_mask`, which has type `u32`.
Kind regards,
Paul
| |