Adding Alex who is now the driver maintainer. On 13.02.2025 17:57, Nikita Zhandarovich wrote: > Gentle ping :) > > On 1/16/25 16:48, Nikita Zhandarovich wrote: >> There are conditions, albeit somewhat unlikely, under which right hand >> expressions, calculating the end of time period in functions like >> repaper_frame_fixed_repeat(), may overflow. >> >> For instance, if 'factor10x' in repaper_get_temperature() is high >> enough (170), as is 'epd->stage_time' in repaper_probe(), then the >> resulting value of 'end' will not fit in unsigned int expression. >> >> Mitigate this by casting 'epd->factored_stage_time' to wider type before >> any multiplication is done. >> >> Found by Linux Verification Center (linuxtesting.org) with static >> analysis tool SVACE. >> >> Fixes: 3589211e9b03 ("drm/tinydrm: Add RePaper e-ink driver") >> Cc: stable@xxxxxxxxxxxxxxx >> Signed-off-by: Nikita Zhandarovich <n.zhandarovich@xxxxxxxxxx> >> --- >> drivers/gpu/drm/tiny/repaper.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/gpu/drm/tiny/repaper.c b/drivers/gpu/drm/tiny/repaper.c >> index 77944eb17b3c..d76c0e8e05f5 100644 >> --- a/drivers/gpu/drm/tiny/repaper.c >> +++ b/drivers/gpu/drm/tiny/repaper.c >> @@ -456,7 +456,7 @@ static void repaper_frame_fixed_repeat(struct repaper_epd *epd, u8 fixed_value, >> enum repaper_stage stage) >> { >> u64 start = local_clock(); >> - u64 end = start + (epd->factored_stage_time * 1000 * 1000); >> + u64 end = start + ((u64)epd->factored_stage_time * 1000 * 1000); >> >> do { >> repaper_frame_fixed(epd, fixed_value, stage); >> @@ -467,7 +467,7 @@ static void repaper_frame_data_repeat(struct repaper_epd *epd, const u8 *image, >> const u8 *mask, enum repaper_stage stage) >> { >> u64 start = local_clock(); >> - u64 end = start + (epd->factored_stage_time * 1000 * 1000); >> + u64 end = start + ((u64)epd->factored_stage_time * 1000 * 1000); >> >> do { >> repaper_frame_data(epd, image, mask, stage); >