[PATCH linux dev-4.10] hwmon (occ): Fix integer overflow in multiplication
Eddie James
eajames at linux.vnet.ibm.com
Wed Dec 20 06:56:47 AEDT 2017
On 12/18/2017 08:27 PM, Lei YU wrote:
> Hi Eddie,
>
> Except for the values for power, the value used for temperature is u16
> and overflows
> as well.
> Powercore reports that if the temperature goes over 65 degrees, the
> value overflows
> obviously as long as it is over 65535.
>
> Could you fix this as well?
Yep, thanks for spotting that.
Eddie
>
> Thanks!
>
> --
> BRs,
> Lei YU
>
> On Mon, Dec 18, 2017 at 10:11 PM, Joel Stanley <joel at jms.id.au> wrote:
>> On Sat, Dec 9, 2017 at 8:47 AM, Eddie James <eajames at linux.vnet.ibm.com> wrote:
>>>
>>> On 12/08/2017 12:16 AM, Joel Stanley wrote:
>>>> On Thu, Dec 7, 2017 at 5:49 AM, Eddie James <eajames at linux.vnet.ibm.com>
>>>> wrote:
>>>>> --- a/drivers/hwmon/occ/common.c
>>>>> +++ b/drivers/hwmon/occ/common.c
>>>>> @@ -468,7 +468,7 @@ static ssize_t occ_show_power_1(struct device *dev,
>>>>> struct device_attribute *attr, char
>>>>> *buf)
>>>>> {
>>>>> int rc;
>>>>> - u32 val = 0;
>>>>> + u64 val = 0;
>>>>> struct power_sensor_1 *power;
>>>>> struct occ *occ = dev_get_drvdata(dev);
>>>>> struct occ_sensors *sensors = &occ->sensors;
>>>>> @@ -491,11 +491,11 @@ static ssize_t occ_show_power_1(struct device *dev,
>>>>> val = get_unaligned_be32(&power->accumulator);
>>>>> break;
>>>>> case 3:
>>>>> - val = get_unaligned_be16(&power->value) * 1000000;
>>>>> + val = (u64)get_unaligned_be16(&power->value) *
>>>>> 1000000ULL;
>>>> I don't think these casts are required, are they?
>>>
>>> I'm not at all sure. I didn't think adding ULL was required here, but
>>> apparently it is. I don't really trust GCC...
>> Sorry, I thought you were joking here. GCC is behaving as it should.
>> Hit me up on IRC for an explanation sometime.
>>
>> Can you resend without the casts?
>>
>> Cheers,
>>
>> Joel
More information about the openbmc
mailing list