[PATCH] drm/meson: Cast mode->clock to unsigned long long

I Hsin Cheng posted 1 patch 9 months, 1 week ago
drivers/gpu/drm/meson/meson_encoder_hdmi.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] drm/meson: Cast mode->clock to unsigned long long
Posted by I Hsin Cheng 9 months, 1 week ago
Coverity scan reported the usage of "mode->clock * 1000" may lead to
integer overflow. Cast the type of "mode->clock" to "unsigned long long"
when utilizing it to avoid potential integer overflow issue.

Link: https://scan5.scan.coverity.com/#/project-view/10074/10063?selectedIssue=1646759
Signed-off-by: I Hsin Cheng <richard120310@gmail.com>
---
 drivers/gpu/drm/meson/meson_encoder_hdmi.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
index 7752d8ac85f0..fe3d3ff7c432 100644
--- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c
+++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
@@ -75,7 +75,7 @@ static void meson_encoder_hdmi_set_vclk(struct meson_encoder_hdmi *encoder_hdmi,
 	unsigned long long venc_freq;
 	unsigned long long hdmi_freq;
 
-	vclk_freq = mode->clock * 1000;
+	vclk_freq = (unsigned long long) mode->clock * 1000;
 
 	/* For 420, pixel clock is half unlike venc clock */
 	if (encoder_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24)
@@ -123,7 +123,7 @@ static enum drm_mode_status meson_encoder_hdmi_mode_valid(struct drm_bridge *bri
 	struct meson_encoder_hdmi *encoder_hdmi = bridge_to_meson_encoder_hdmi(bridge);
 	struct meson_drm *priv = encoder_hdmi->priv;
 	bool is_hdmi2_sink = display_info->hdmi.scdc.supported;
-	unsigned long long clock = mode->clock * 1000;
+	unsigned long long clock = (unsigned long long) mode->clock * 1000;
 	unsigned long long phy_freq;
 	unsigned long long vclk_freq;
 	unsigned long long venc_freq;
-- 
2.43.0
Re: [PATCH] drm/meson: Cast mode->clock to unsigned long long
Posted by Christophe JAILLET 9 months, 1 week ago
Le 29/04/2025 à 21:07, I Hsin Cheng a écrit :
> Coverity scan reported the usage of "mode->clock * 1000" may lead to
> integer overflow. Cast the type of "mode->clock" to "unsigned long long"
> when utilizing it to avoid potential integer overflow issue.
> 
> Link: https://scan5.scan.coverity.com/#/project-view/10074/10063?selectedIssue=1646759
> Signed-off-by: I Hsin Cheng <richard120310@gmail.com>
> ---
>   drivers/gpu/drm/meson/meson_encoder_hdmi.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> index 7752d8ac85f0..fe3d3ff7c432 100644
> --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> @@ -75,7 +75,7 @@ static void meson_encoder_hdmi_set_vclk(struct meson_encoder_hdmi *encoder_hdmi,
>   	unsigned long long venc_freq;
>   	unsigned long long hdmi_freq;
>   
> -	vclk_freq = mode->clock * 1000;
> +	vclk_freq = (unsigned long long) mode->clock * 1000;

Hi,

maybe, using 1000ULL instead would do the same, but would be less verbose?

CJ

>   
>   	/* For 420, pixel clock is half unlike venc clock */
>   	if (encoder_hdmi->output_bus_fmt == MEDIA_BUS_FMT_UYYVYY8_0_5X24)
> @@ -123,7 +123,7 @@ static enum drm_mode_status meson_encoder_hdmi_mode_valid(struct drm_bridge *bri
>   	struct meson_encoder_hdmi *encoder_hdmi = bridge_to_meson_encoder_hdmi(bridge);
>   	struct meson_drm *priv = encoder_hdmi->priv;
>   	bool is_hdmi2_sink = display_info->hdmi.scdc.supported;
> -	unsigned long long clock = mode->clock * 1000;
> +	unsigned long long clock = (unsigned long long) mode->clock * 1000;
>   	unsigned long long phy_freq;
>   	unsigned long long vclk_freq;
>   	unsigned long long venc_freq;

Re: [PATCH] drm/meson: Cast mode->clock to unsigned long long
Posted by Martin Blumenstingl 9 months, 1 week ago
On Tue, Apr 29, 2025 at 11:00 PM Christophe JAILLET
<christophe.jaillet@wanadoo.fr> wrote:
>
> Le 29/04/2025 à 21:07, I Hsin Cheng a écrit :
> > Coverity scan reported the usage of "mode->clock * 1000" may lead to
> > integer overflow. Cast the type of "mode->clock" to "unsigned long long"
> > when utilizing it to avoid potential integer overflow issue.
> >
> > Link: https://scan5.scan.coverity.com/#/project-view/10074/10063?selectedIssue=1646759
> > Signed-off-by: I Hsin Cheng <richard120310@gmail.com>
> > ---
> >   drivers/gpu/drm/meson/meson_encoder_hdmi.c | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> > index 7752d8ac85f0..fe3d3ff7c432 100644
> > --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> > +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> > @@ -75,7 +75,7 @@ static void meson_encoder_hdmi_set_vclk(struct meson_encoder_hdmi *encoder_hdmi,
> >       unsigned long long venc_freq;
> >       unsigned long long hdmi_freq;
> >
> > -     vclk_freq = mode->clock * 1000;
> > +     vclk_freq = (unsigned long long) mode->clock * 1000;
>
> Hi,
>
> maybe, using 1000ULL instead would do the same, but would be less verbose?
Agreed, that would make the code more similar to drm_hdmi_compute_mode_clock().
The goal is to switch to drm_hdmi_compute_mode_clock() mid-term anyways.
Re: [PATCH] drm/meson: Cast mode->clock to unsigned long long
Posted by I Hsin Cheng 9 months, 1 week ago
On Sun, May 04, 2025 at 11:06:06PM +0200, Martin Blumenstingl wrote:
> On Tue, Apr 29, 2025 at 11:00 PM Christophe JAILLET
> <christophe.jaillet@wanadoo.fr> wrote:
> >
> > Le 29/04/2025 à 21:07, I Hsin Cheng a écrit :
> > > Coverity scan reported the usage of "mode->clock * 1000" may lead to
> > > integer overflow. Cast the type of "mode->clock" to "unsigned long long"
> > > when utilizing it to avoid potential integer overflow issue.
> > >
> > > Link: https://scan5.scan.coverity.com/#/project-view/10074/10063?selectedIssue=1646759
> > > Signed-off-by: I Hsin Cheng <richard120310@gmail.com>
> > > ---
> > >   drivers/gpu/drm/meson/meson_encoder_hdmi.c | 4 ++--
> > >   1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> > > index 7752d8ac85f0..fe3d3ff7c432 100644
> > > --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> > > +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> > > @@ -75,7 +75,7 @@ static void meson_encoder_hdmi_set_vclk(struct meson_encoder_hdmi *encoder_hdmi,
> > >       unsigned long long venc_freq;
> > >       unsigned long long hdmi_freq;
> > >
> > > -     vclk_freq = mode->clock * 1000;
> > > +     vclk_freq = (unsigned long long) mode->clock * 1000;
> >
> > Hi,
> >
> > maybe, using 1000ULL instead would do the same, but would be less verbose?
> Agreed, that would make the code more similar to drm_hdmi_compute_mode_clock().
> The goal is to switch to drm_hdmi_compute_mode_clock() mid-term anyways.

Hi,

Thanks for your review and suggestions !
I'll make the corresponding changes and send v2.

Best regards,
I Hsin Cheng