diff mbox

thermal: core: don't call unsupported trip on thermal_tripped_notify()

Message ID 877fj44xk5.wl%kuninori.morimoto.gx@renesas.com (mailing list archive)
State Not Applicable
Delegated to: Geert Uytterhoeven
Headers show

Commit Message

Kuninori Morimoto Jan. 20, 2016, 5:45 a.m. UTC
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

It needs to check maximum trip size before using it.
Otherwise, each driver might be called with unsupported trip.

Reported-by: Magnus Damm <magnus.damm@gmail.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 drivers/thermal/thermal_core.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Geert Uytterhoeven Jan. 20, 2016, 7:07 a.m. UTC | #1
Hi Morimoto-san,

On Wed, Jan 20, 2016 at 6:45 AM, Kuninori Morimoto
<kuninori.morimoto.gx@renesas.com> wrote:
> From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
>
> It needs to check maximum trip size before using it.
> Otherwise, each driver might be called with unsupported trip.
>
> Reported-by: Magnus Damm <magnus.damm@gmail.com>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
>  drivers/thermal/thermal_core.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 7f7a3ca..9761f49 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -461,6 +461,9 @@ static void thermal_tripped_notify(struct thermal_zone_device *tz,
>                 kobject_uevent_env(&tz->device.kobj, KOBJ_CHANGE, msg);
>         }
>
> +       if (tz->trips <= trip + 1)
> +               goto unlock;
> +

Thanks, I assume this will fix the "rcar_thermal e61f0000.thermal: rcar
driver trip error" messages.

However, I don't know if it's the right fix, cfr. my unanswered question at
https://lkml.org/lkml/2016/1/5/107

>         ret = tz->ops->get_trip_temp(tz, trip + 1, &upper_trip_temp);
>         if (ret)
>                 goto unlock;
> --
> 1.9.1

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Kuninori Morimoto Jan. 20, 2016, 7:25 a.m. UTC | #2
Hi Geert

> > From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> >
> > It needs to check maximum trip size before using it.
> > Otherwise, each driver might be called with unsupported trip.
> >
> > Reported-by: Magnus Damm <magnus.damm@gmail.com>
> > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> > ---
> >  drivers/thermal/thermal_core.c | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> > index 7f7a3ca..9761f49 100644
> > --- a/drivers/thermal/thermal_core.c
> > +++ b/drivers/thermal/thermal_core.c
> > @@ -461,6 +461,9 @@ static void thermal_tripped_notify(struct thermal_zone_device *tz,
> >                 kobject_uevent_env(&tz->device.kobj, KOBJ_CHANGE, msg);
> >         }
> >
> > +       if (tz->trips <= trip + 1)
> > +               goto unlock;
> > +
> 
> Thanks, I assume this will fix the "rcar_thermal e61f0000.thermal: rcar
> driver trip error" messages.
> 
> However, I don't know if it's the right fix, cfr. my unanswered question at
> https://lkml.org/lkml/2016/1/5/107
> 
> >         ret = tz->ops->get_trip_temp(tz, trip + 1, &upper_trip_temp);
> >         if (ret)
> >                 goto unlock;

Yes. we have 2 solutions.
     1) use this patch
     2) dev_warn() -> dev_dbg()
But my opinion is that using trip with +1 without checking supported size
is strange :)
diff mbox

Patch

diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 7f7a3ca..9761f49 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -461,6 +461,9 @@  static void thermal_tripped_notify(struct thermal_zone_device *tz,
 		kobject_uevent_env(&tz->device.kobj, KOBJ_CHANGE, msg);
 	}
 
+	if (tz->trips <= trip + 1)
+		goto unlock;
+
 	ret = tz->ops->get_trip_temp(tz, trip + 1, &upper_trip_temp);
 	if (ret)
 		goto unlock;