Hi Geert,
Thank you for the patch.
On Mon, Jan 11, 2021 at 01:57:02PM +0100, Geert Uytterhoeven wrote:
As nwl_dsi.lanes is u32, and NSEC_PER_SEC is 1000000000L, the second multiplication in
dsi->lanes * 8 * NSEC_PER_SEC
will overflow on a 32-bit platform. Fix this by making the constant unsigned long long, forcing 64-bit arithmetic.
While iMX8 is arm64, this driver is currently used on 64-bit platforms only, where long is 64-bit, so this cannot happen. But the issue may start to happen when the driver is reused for a 32-bit SoC, or when code is copied for a new driver.
Signed-off-by: Geert Uytterhoeven geert+renesas@glider.be
Compile-tested only.
drivers/gpu/drm/bridge/nwl-dsi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/bridge/nwl-dsi.c b/drivers/gpu/drm/bridge/nwl-dsi.c index 66b67402f1acd57d..a8da3081efdcc84e 100644 --- a/drivers/gpu/drm/bridge/nwl-dsi.c +++ b/drivers/gpu/drm/bridge/nwl-dsi.c @@ -195,7 +195,7 @@ static u32 ps2bc(struct nwl_dsi *dsi, unsigned long long ps) u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
return DIV64_U64_ROUND_UP(ps * dsi->mode.clock * bpp,
dsi->lanes * 8 * NSEC_PER_SEC);
dsi->lanes * 8ULL * NSEC_PER_SEC);
I wonder if we could get rid of a whole class of bugs by turning NSEC_PER_SEC into a ULL, but I suppose there are valid cases where a 32-bit integer is enough.
Reviewed-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
How did you come across this by the way ?
}
/*