On Mon, Dec 16, 2024 at 08:36:47PM +0300, Murad Masimov wrote: > The value returned by the driver after processing the contents of the Current > Register does not correspond to the TMP512/TMP513 specifications. A raw > register value is converted to a signed integer value by a sign extension in > accordance with the algorithm provided in the specification, but due to the > off-by-one error in the sign bit index, the result is incorrect. Moreover, > negative values will be reported as large positive due to missing sign > extension from u32 to long. > > According to the TMP512 and TMP513 datasheets, the Current Register (07h) is a > 16-bit two's complement integer value. E.g., if regval = 1000 0011 0000 0000, > then the value must be (-32000 * lsb), but the driver will return (33536 * lsb). > > Fix off-by-one bug, and also cast data->curr_lsb_ua (which is of type u32) to > long to prevent incorrect cast for negative values. > > Found by Linux Verification Center (linuxtesting.org) with SVACE. > > Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.") > Signed-off-by: Murad Masimov <m.masimov@xxxxxxxxx> Applied, after fixing checkpatch complaints. Guenter