From: Brian Norris <briannorris@chromium.org>
To: Eduardo Valentin <edubezval@gmail.com>
Cc: Zhang Rui <rui.zhang@intel.com>, Heiko Stuebner <heiko@sntech.de>,
linux-pm@vger.kernel.org, linux-rockchip@lists.infradead.org,
linux-kernel@vger.kernel.org, Caesar Wang <wxt@rock-chips.com>,
Stephen Barber <smbarber@chromium.org>
Subject: Re: [PATCH 1/3] thermal: handle get_temp() errors properly
Date: Fri, 18 Nov 2016 21:30:15 -0800 [thread overview]
Message-ID: <20161119053014.GA58324@google.com> (raw)
In-Reply-To: <20161119034158.GA26405@localhost.localdomain>
Hi,
On Fri, Nov 18, 2016 at 07:41:59PM -0800, Eduardo Valentin wrote:
> On Fri, Nov 18, 2016 at 03:52:55PM -0800, Brian Norris wrote:
> > If using CONFIG_THERMAL_EMULATION, there's a corner case where we might
> > get an error from the zone's get_temp() callback, but we'll ignore that
> > and keep using its value. Let's just error out properly instead.
> >
> > Signed-off-by: Brian Norris <briannorris@chromium.org>
> > ---
> > 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 911fd964c742..0fa497f10d25 100644
> > --- a/drivers/thermal/thermal_core.c
> > +++ b/drivers/thermal/thermal_core.c
> > @@ -494,6 +494,8 @@ int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp)
> > mutex_lock(&tz->lock);
> >
> > ret = tz->ops->get_temp(tz, temp);
> > + if (ret)
> > + goto exit_unlock;
>
> Yeah, but the follow through is intentional, if I am not mistaken.
OK...but it has a bug. It potentially utilizes an uninitialized value
for *temp.
> >
> > if (IS_ENABLED(CONFIG_THERMAL_EMULATION) && tz->emul_temperature) {
>
> Even if the driver is not able to read real temperature, but emul temp
> is configured, then there is still opportunity to report the emulated
> temperature.
OK, maybe, but you should avoid doing this comparison then:
513 if (!ret && *temp < crit_temp)
514 *temp = tz->emul_temperature;
Note that 'ret' might be 0 (from the calls to ->get_trip_type()), and then
you're comparing with the uninitialized value of *temp. So you need some
solution that accounts for this and decides to ignore the real
temperature properly.
> > for (count = 0; count < tz->trips; count++) {
> > @@ -514,6 +516,7 @@ int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp)
> > *temp = tz->emul_temperature;
>
> And if you check the lines at the bottom of the loop, you will see that,
> in the fail case, we will stil compare to what is the content of temp,
> which might be problematic.
Yes...are you saying the same thing I am above?
> I would prefer we consider the patch I sent
> some time ago:
> https://patchwork.kernel.org/patch/7876381/
Honestly I didn't look that deeply into the framework here (and I also
don't use CONFIG_THERMAL_EMULATION), I was just fixing something that
was obviously wrong.
But on first read, that patch looks good to me -- although it'd be good
to note the uninitialized value fix in the comit log. Any reason that
didn't end up getting merged? It looks like it got reviewed, and you're
a thermal subsystem maintainer...
Brian
next prev parent reply other threads:[~2016-11-19 5:30 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-18 23:52 [PATCH 1/3] thermal: handle get_temp() errors properly Brian Norris
2016-11-18 23:52 ` [PATCH 2/3] thermal: rockchip: improve conversion error messages Brian Norris
2016-11-19 3:31 ` Caesar Wang
2016-11-19 3:35 ` Caesar Wang
2016-11-22 1:51 ` Caesar Wang
2016-11-22 2:15 ` Brian Norris
2016-11-22 2:33 ` Caesar Wang
2016-11-22 3:43 ` Brian Norris
2016-11-22 7:57 ` Zhang Rui
2016-11-22 12:44 ` Caesar Wang
[not found] ` <1479513177-81504-1-git-send-email-briannorris-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2016-11-18 23:52 ` [PATCH 3/3] thermal: rockchip: don't pass table structs by value Brian Norris
2016-11-18 23:52 ` Brian Norris
2016-11-19 4:03 ` Caesar Wang
2016-11-19 3:21 ` [PATCH 1/3] thermal: handle get_temp() errors properly Caesar Wang
2016-11-19 3:41 ` Eduardo Valentin
2016-11-19 5:30 ` Brian Norris [this message]
2016-11-22 7:52 ` Zhang Rui
2016-11-22 11:00 ` Eduardo Valentin
[not found] ` <20161122110045.GB2018-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2016-11-22 22:27 ` Brian Norris
2016-11-22 22:27 ` Brian Norris
2017-09-08 18:15 ` Dmitry Torokhov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161119053014.GA58324@google.com \
--to=briannorris@chromium.org \
--cc=edubezval@gmail.com \
--cc=heiko@sntech.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=rui.zhang@intel.com \
--cc=smbarber@chromium.org \
--cc=wxt@rock-chips.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.