• Guenter Roeck's avatar
    hwmon: (nct6775) Fix access to fan pulse registers · c793279c
    Guenter Roeck authored
    Not all fans have a fan pulse register. This can result in reading
    beyond the end of REG_FAN_PULSES and FAN_PULSE_SHIFT arrays,
    and was reported by smatch as possible error.
    
    1672          for (i = 0; i < ARRAY_SIZE(data->rpm); i++) {
                                  ^^^^^^^^^^^^^^^^^^^^^^^^
    			      This is a 7 element array.
    ...
    1685                  data->fan_pulses[i] =
    1686                    (nct6775_read_value(data, data->REG_FAN_PULSES[i])
    1687                          >> data->FAN_PULSE_SHIFT[i]) & 0x03;
                                     ^^^^^^^^^^^^^^^^^^^^^^^^
    				 FAN_PULSE_SHIFT is either 5 or 6
    				 elements.
    
    To fix the problem, we have to ensure that all REG_FAN_PULSES and
    FAN_PULSE_SHIFT have the appropriate length, and that REG_FAN_PULSES
    is only read if the register actually exists.
    
    Fixes: 6c009501 ("hwmon: (nct6775) Add support for NCT6102D/6106D")
    Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    c793279c
nct6775.c 128 KB