On 2025-12-04 at 14:38:27 GMT, Krzysztof Karas wrote:
> vpos (int) field multiplied by crtc_htotal (u16) may cause
> implicit promotion of the latter and overflow the result causing
> undefined behavior.
> 
> Cast the u16 operand to (s32) type to avoid that.
> 
> Signed-off-by: Krzysztof Karas <[email protected]>

Reviewed-by: Krzysztof Niemiec <[email protected]>

Thanks
Krzysztof

> ---
> 
> v4:
> * use s32 cast instead of int;
> 
>  drivers/gpu/drm/drm_vblank.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
> index 32d013c5c8fc..e25dcaa6cad4 100644
> --- a/drivers/gpu/drm/drm_vblank.c
> +++ b/drivers/gpu/drm/drm_vblank.c
> @@ -791,7 +791,7 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
>        * since start of scanout at first display scanline. delta_ns
>        * can be negative if start of scanout hasn't happened yet.
>        */
> -     delta_ns = div_s64(1000000LL * (vpos * mode->crtc_htotal + hpos),
> +     delta_ns = div_s64(1000000LL * (vpos * (s32)mode->crtc_htotal + hpos),
>                          mode->crtc_clock);
>  
>       /* Subtract time delta from raw timestamp to get final
> -- 
> 2.34.1
> 

Reply via email to