[v2,3/3] pwm: stm32: Validate breakinput data from DT
diff mbox series

Message ID 20191016110601.1765415-4-thierry.reding@gmail.com
State Accepted
Headers show
Series
  • pwm: stm32: Minor cleanups
Related show

Commit Message

Thierry Reding Oct. 16, 2019, 11:06 a.m. UTC
Both index and level can only be either 0 or 1 and the filter value is
limited to values between (and including) 0 and 15. Validate that the
device tree node contains values that are within these ranges.

Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
---
 drivers/pwm/pwm-stm32.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Uwe Kleine-König Oct. 16, 2019, 11:15 a.m. UTC | #1
On Wed, Oct 16, 2019 at 01:06:01PM +0200, Thierry Reding wrote:
> Both index and level can only be either 0 or 1 and the filter value is
> limited to values between (and including) 0 and 15. Validate that the
> device tree node contains values that are within these ranges.
> 
> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
> ---
>  drivers/pwm/pwm-stm32.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c
> index db1d675b45fb..7ff48c14fae8 100644
> --- a/drivers/pwm/pwm-stm32.c
> +++ b/drivers/pwm/pwm-stm32.c
> @@ -530,6 +530,7 @@ static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
>  				       struct device_node *np)
>  {
>  	int nb, ret, array_size;
> +	unsigned int i;
>  
>  	nb = of_property_count_elems_of_size(np, "st,breakinput",
>  					     sizeof(struct stm32_breakinput));
> @@ -551,6 +552,13 @@ static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
>  	if (ret)
>  		return ret;
>  
> +	for (i = 0; i < priv->num_breakinputs; i++) {
> +		if (priv->breakinputs[i].index > 1 ||
> +		    priv->breakinputs[i].level > 1 ||
> +		    priv->breakinputs[i].filter > 15)
> +			return -EINVAL;
> +	}
> +

maybe put this patch before patch 1 that relies on index not being
bigger than 1?

Best regards
Uwe
Thierry Reding Oct. 16, 2019, 1:07 p.m. UTC | #2
On Wed, Oct 16, 2019 at 01:15:22PM +0200, Uwe Kleine-König wrote:
> On Wed, Oct 16, 2019 at 01:06:01PM +0200, Thierry Reding wrote:
> > Both index and level can only be either 0 or 1 and the filter value is
> > limited to values between (and including) 0 and 15. Validate that the
> > device tree node contains values that are within these ranges.
> > 
> > Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
> > ---
> >  drivers/pwm/pwm-stm32.c | 8 ++++++++
> >  1 file changed, 8 insertions(+)
> > 
> > diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c
> > index db1d675b45fb..7ff48c14fae8 100644
> > --- a/drivers/pwm/pwm-stm32.c
> > +++ b/drivers/pwm/pwm-stm32.c
> > @@ -530,6 +530,7 @@ static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
> >  				       struct device_node *np)
> >  {
> >  	int nb, ret, array_size;
> > +	unsigned int i;
> >  
> >  	nb = of_property_count_elems_of_size(np, "st,breakinput",
> >  					     sizeof(struct stm32_breakinput));
> > @@ -551,6 +552,13 @@ static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
> >  	if (ret)
> >  		return ret;
> >  
> > +	for (i = 0; i < priv->num_breakinputs; i++) {
> > +		if (priv->breakinputs[i].index > 1 ||
> > +		    priv->breakinputs[i].level > 1 ||
> > +		    priv->breakinputs[i].filter > 15)
> > +			return -EINVAL;
> > +	}
> > +
> 
> maybe put this patch before patch 1 that relies on index not being
> bigger than 1?

Yeah, that's a good idea. Does that resolve the concerns you had on
patch 1?

Thierry
Uwe Kleine-König Oct. 16, 2019, 2:35 p.m. UTC | #3
On Wed, Oct 16, 2019 at 03:07:16PM +0200, Thierry Reding wrote:
> On Wed, Oct 16, 2019 at 01:15:22PM +0200, Uwe Kleine-König wrote:
> > On Wed, Oct 16, 2019 at 01:06:01PM +0200, Thierry Reding wrote:
> > > Both index and level can only be either 0 or 1 and the filter value is
> > > limited to values between (and including) 0 and 15. Validate that the
> > > device tree node contains values that are within these ranges.
> > > 
> > > Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
> > > ---
> > >  drivers/pwm/pwm-stm32.c | 8 ++++++++
> > >  1 file changed, 8 insertions(+)
> > > 
> > > diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c
> > > index db1d675b45fb..7ff48c14fae8 100644
> > > --- a/drivers/pwm/pwm-stm32.c
> > > +++ b/drivers/pwm/pwm-stm32.c
> > > @@ -530,6 +530,7 @@ static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
> > >  				       struct device_node *np)
> > >  {
> > >  	int nb, ret, array_size;
> > > +	unsigned int i;
> > >  
> > >  	nb = of_property_count_elems_of_size(np, "st,breakinput",
> > >  					     sizeof(struct stm32_breakinput));
> > > @@ -551,6 +552,13 @@ static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
> > >  	if (ret)
> > >  		return ret;
> > >  
> > > +	for (i = 0; i < priv->num_breakinputs; i++) {
> > > +		if (priv->breakinputs[i].index > 1 ||
> > > +		    priv->breakinputs[i].level > 1 ||
> > > +		    priv->breakinputs[i].filter > 15)
> > > +			return -EINVAL;
> > > +	}
> > > +
> > 
> > maybe put this patch before patch 1 that relies on index not being
> > bigger than 1?
> 
> Yeah, that's a good idea. Does that resolve the concerns you had on
> patch 1?

Yes, assuming you mention that in the commit log.

Best regards
Uwe

Patch
diff mbox series

diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c
index db1d675b45fb..7ff48c14fae8 100644
--- a/drivers/pwm/pwm-stm32.c
+++ b/drivers/pwm/pwm-stm32.c
@@ -530,6 +530,7 @@  static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
 				       struct device_node *np)
 {
 	int nb, ret, array_size;
+	unsigned int i;
 
 	nb = of_property_count_elems_of_size(np, "st,breakinput",
 					     sizeof(struct stm32_breakinput));
@@ -551,6 +552,13 @@  static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
 	if (ret)
 		return ret;
 
+	for (i = 0; i < priv->num_breakinputs; i++) {
+		if (priv->breakinputs[i].index > 1 ||
+		    priv->breakinputs[i].level > 1 ||
+		    priv->breakinputs[i].filter > 15)
+			return -EINVAL;
+	}
+
 	return stm32_pwm_apply_breakinputs(priv);
 }