[PATCH] pwm: cadence-ttc: Insufficient elements in array

Michal Simek michal.simek at amd.com
Tue Sep 9 07:58:23 CEST 2025



On 9/1/25 19:00, Andrew Goodbody wrote:
> The Cadence TTC has 3 channels that can each be used for PWM functions.
> Ensure that the array has sufficient elements to avoid a possible memory
> access overrun. Use a macro to keep the array size and limit checks in
> sync so adjust checks to work with this.
> 
> This issue was found by Smatch.
> 
> Signed-off-by: Andrew Goodbody <andrew.goodbody at linaro.org>
> ---
>   drivers/pwm/pwm-cadence-ttc.c | 10 ++++++----
>   1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/pwm/pwm-cadence-ttc.c b/drivers/pwm/pwm-cadence-ttc.c
> index 767628833bc..fae6d5a1739 100644
> --- a/drivers/pwm/pwm-cadence-ttc.c
> +++ b/drivers/pwm/pwm-cadence-ttc.c
> @@ -47,6 +47,8 @@
>   #define TTC_MATCH_1_COUNTER(reg, channel) \
>   	TTC_REG((reg) + MATCH_1_COUNTER, (channel))
>   
> +#define TTC_PWM_CHANNELS	3
> +
>   struct cadence_ttc_pwm_plat {
>   	u8 *regs;
>   	u32 timer_width;
> @@ -57,7 +59,7 @@ struct cadence_ttc_pwm_priv {
>   	u32 timer_width;
>   	u32 timer_mask;
>   	unsigned long frequency;
> -	bool invert[2];
> +	bool invert[TTC_PWM_CHANNELS];
>   };
>   
>   static int cadence_ttc_pwm_set_invert(struct udevice *dev, uint channel,
> @@ -65,7 +67,7 @@ static int cadence_ttc_pwm_set_invert(struct udevice *dev, uint channel,
>   {
>   	struct cadence_ttc_pwm_priv *priv = dev_get_priv(dev);
>   
> -	if (channel > 2) {
> +	if (channel >= TTC_PWM_CHANNELS) {
>   		dev_err(dev, "Unsupported channel number %d(max 2)\n", channel);
>   		return -EINVAL;
>   	}
> @@ -87,7 +89,7 @@ static int cadence_ttc_pwm_set_config(struct udevice *dev, uint channel,
>   	dev_dbg(dev, "channel %d, duty %d/period %d ns\n", channel,
>   		duty_ns, period_ns);
>   
> -	if (channel > 2) {
> +	if (channel >= TTC_PWM_CHANNELS) {
>   		dev_err(dev, "Unsupported channel number %d(max 2)\n", channel);
>   		return -EINVAL;
>   	}
> @@ -153,7 +155,7 @@ static int cadence_ttc_pwm_set_enable(struct udevice *dev, uint channel,
>   {
>   	struct cadence_ttc_pwm_priv *priv = dev_get_priv(dev);
>   
> -	if (channel > 2) {
> +	if (channel >= TTC_PWM_CHANNELS) {
>   		dev_err(dev, "Unsupported channel number %d(max 2)\n", channel);
>   		return -EINVAL;
>   	}
> 
> ---
> base-commit: 4a2f360bd280b2b5af1c5daffbc189590c83c995
> change-id: 20250901-cadence_pwm-61d1815e7752
> 
> Best regards,

Applied.
M


More information about the U-Boot mailing list