Re: [PATCH stable] x86/tsc: Prevent result truncation on 32 bit

From: Greg KH
Date: Wed Sep 12 2018 - 14:41:07 EST


On Wed, Sep 12, 2018 at 02:42:08PM +0200, Thomas Gleixner wrote:
> Subject: x86/tsc: Prevent result truncation on 32 bit
> From: Chuanhua Lei <chuanhua.lei@xxxxxxxxxxxxxxx>
> Date: Thu Sep 6 18:03:23 2018 +0800
>
> From: Chuanhua Lei <chuanhua.lei@xxxxxxxxxxxxxxx>
>
> Commit 17f6bac2249356c795339e03a0742cd79be3cab8 upstream.
>
> Loops per jiffy is calculated by multiplying tsc_khz with 1e3 and then
> dividing it by HZ.
>
> Both tsc_khz and the temporary variable holding the multiplication result
> are of type unsigned long, so on 32bit the result is truncated to the lower
> 32bit.
>
> Use u64 as type for the temporary variable and cast tsc_khz to it before
> multiplying.
>
> [ tglx: Backport to stable. Due to massive code changes is the upstream
> commit not applicable anymore. The issue has gone unnoticed in
> kernels pre 4.19 because the bogus LPJ value gets fixed up in a
> later stage of early boot, but it still might cause subtle and hard
> to debug issues between these two points. ]

Thanks for the backport, now queued up.

greg k-h