soc/tegra: pmc: fix child-node lookup

Message ID 20171115094458.31666-1-johan@kernel.org
State Accepted
Headers show
Series
  • soc/tegra: pmc: fix child-node lookup
Related show

Commit Message

Johan Hovold Nov. 15, 2017, 9:44 a.m.
Fix child-node lookup during probe, which ended up searching the whole
device tree depth-first starting at the parent rather than just matching
on its children.

To make things worse, the parent pmc node could end up being prematurely
freed as of_find_node_by_name() drops a reference to its first argument.

Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
Cc: stable <stable@vger.kernel.org>     # 4.0
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
 drivers/soc/tegra/pmc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Mikko Perttunen Nov. 16, 2017, 11:40 a.m. | #1
On 15.11.2017 11:44, Johan Hovold wrote:
> Fix child-node lookup during probe, which ended up searching the whole
> device tree depth-first starting at the parent rather than just matching
> on its children.
>
> To make things worse, the parent pmc node could end up being prematurely
> freed as of_find_node_by_name() drops a reference to its first argument.
>
> Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
> Cc: stable <stable@vger.kernel.org>     # 4.0
> Cc: Mikko Perttunen <mperttunen@nvidia.com>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
>  drivers/soc/tegra/pmc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
> index 0453ff6839a7..7e9ef3431bea 100644
> --- a/drivers/soc/tegra/pmc.c
> +++ b/drivers/soc/tegra/pmc.c
> @@ -1321,7 +1321,7 @@ static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
>  	if (!pmc->soc->has_tsense_reset)
>  		return;
>
> -	np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip");
> +	np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
>  	if (!np) {
>  		dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
>  		return;
>

Good find!

Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johan Hovold Jan. 12, 2018, 9:19 a.m. | #2
On Thu, Nov 16, 2017 at 01:40:24PM +0200, Mikko Perttunen wrote:
> On 15.11.2017 11:44, Johan Hovold wrote:
> > Fix child-node lookup during probe, which ended up searching the whole
> > device tree depth-first starting at the parent rather than just matching
> > on its children.
> >
> > To make things worse, the parent pmc node could end up being prematurely
> > freed as of_find_node_by_name() drops a reference to its first argument.
> >
> > Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
> > Cc: stable <stable@vger.kernel.org>     # 4.0
> > Cc: Mikko Perttunen <mperttunen@nvidia.com>
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> > ---
> >  drivers/soc/tegra/pmc.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
> > index 0453ff6839a7..7e9ef3431bea 100644
> > --- a/drivers/soc/tegra/pmc.c
> > +++ b/drivers/soc/tegra/pmc.c
> > @@ -1321,7 +1321,7 @@ static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
> >  	if (!pmc->soc->has_tsense_reset)
> >  		return;
> >
> > -	np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip");
> > +	np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
> >  	if (!np) {
> >  		dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
> >  		return;
> >
> 
> Good find!
> 
> Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>

This one still hasn't made it to linux-next so figured I'd send a
reminder. Will you be picking this one up for 4.16, Thierry?

Thanks,
Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johan Hovold March 22, 2018, 1:52 p.m. | #3
On Fri, Jan 12, 2018 at 10:19:51AM +0100, Johan Hovold wrote:
> On Thu, Nov 16, 2017 at 01:40:24PM +0200, Mikko Perttunen wrote:
> > On 15.11.2017 11:44, Johan Hovold wrote:
> > > Fix child-node lookup during probe, which ended up searching the whole
> > > device tree depth-first starting at the parent rather than just matching
> > > on its children.
> > >
> > > To make things worse, the parent pmc node could end up being prematurely
> > > freed as of_find_node_by_name() drops a reference to its first argument.
> > >
> > > Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
> > > Cc: stable <stable@vger.kernel.org>     # 4.0
> > > Cc: Mikko Perttunen <mperttunen@nvidia.com>
> > > Signed-off-by: Johan Hovold <johan@kernel.org>
> > > ---
> > >  drivers/soc/tegra/pmc.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
> > > index 0453ff6839a7..7e9ef3431bea 100644
> > > --- a/drivers/soc/tegra/pmc.c
> > > +++ b/drivers/soc/tegra/pmc.c
> > > @@ -1321,7 +1321,7 @@ static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
> > >  	if (!pmc->soc->has_tsense_reset)
> > >  		return;
> > >
> > > -	np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip");
> > > +	np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
> > >  	if (!np) {
> > >  		dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
> > >  		return;
> > >
> > 
> > Good find!
> > 
> > Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>
> 
> This one still hasn't made it to linux-next so figured I'd send a
> reminder. Will you be picking this one up for 4.16, Thierry?

Another two months, another reminder; Thierry, can you pick this fix up?
It's got Mikko's ack.

Mikko, can you please ping Thierry in case I'm getting stuck in his spam
filter or something?

Thanks,
Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Thierry Reding March 22, 2018, 2:24 p.m. | #4
On Wed, Nov 15, 2017 at 10:44:58AM +0100, Johan Hovold wrote:
> Fix child-node lookup during probe, which ended up searching the whole
> device tree depth-first starting at the parent rather than just matching
> on its children.
> 
> To make things worse, the parent pmc node could end up being prematurely
> freed as of_find_node_by_name() drops a reference to its first argument.
> 
> Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
> Cc: stable <stable@vger.kernel.org>     # 4.0
> Cc: Mikko Perttunen <mperttunen@nvidia.com>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
>  drivers/soc/tegra/pmc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Applied, thanks.

Thierry
Johan Hovold Aug. 13, 2018, 2:33 p.m. | #5
Hi Thierry,

On Thu, Mar 22, 2018 at 03:24:32PM +0100, Thierry Reding wrote:
> On Wed, Nov 15, 2017 at 10:44:58AM +0100, Johan Hovold wrote:
> > Fix child-node lookup during probe, which ended up searching the whole
> > device tree depth-first starting at the parent rather than just matching
> > on its children.
> > 
> > To make things worse, the parent pmc node could end up being prematurely
> > freed as of_find_node_by_name() drops a reference to its first argument.
> > 
> > Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
> > Cc: stable <stable@vger.kernel.org>     # 4.0
> > Cc: Mikko Perttunen <mperttunen@nvidia.com>
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> > ---
> >  drivers/soc/tegra/pmc.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Applied, thanks.

I noticed this one still hasn't made it into linux-next. Looks like it
wasn't included in you 4.17 pull request and is still sitting in the
tegra for-4.17/soc branch.

Johan
Thierry Reding Aug. 14, 2018, 2:24 p.m. | #6
On Mon, Aug 13, 2018 at 04:33:17PM +0200, Johan Hovold wrote:
> Hi Thierry,
> 
> On Thu, Mar 22, 2018 at 03:24:32PM +0100, Thierry Reding wrote:
> > On Wed, Nov 15, 2017 at 10:44:58AM +0100, Johan Hovold wrote:
> > > Fix child-node lookup during probe, which ended up searching the whole
> > > device tree depth-first starting at the parent rather than just matching
> > > on its children.
> > > 
> > > To make things worse, the parent pmc node could end up being prematurely
> > > freed as of_find_node_by_name() drops a reference to its first argument.
> > > 
> > > Fixes: 3568df3d31d6 ("soc: tegra: Add thermal reset (thermtrip) support to PMC")
> > > Cc: stable <stable@vger.kernel.org>     # 4.0
> > > Cc: Mikko Perttunen <mperttunen@nvidia.com>
> > > Signed-off-by: Johan Hovold <johan@kernel.org>
> > > ---
> > >  drivers/soc/tegra/pmc.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > Applied, thanks.
> 
> I noticed this one still hasn't made it into linux-next. Looks like it
> wasn't included in you 4.17 pull request and is still sitting in the
> tegra for-4.17/soc branch.

Indeed. Looking at my tree it seems like I applied this to for-4.17/soc
a couple of days after the signed tag for the pull request. It probably
should've gone into a for-4.18/soc, or perhaps into fixes pull request.

I've cherry-picked it into for-4.20/soc now. Thanks for the reminder.

Thierry

Patch

diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
index 0453ff6839a7..7e9ef3431bea 100644
--- a/drivers/soc/tegra/pmc.c
+++ b/drivers/soc/tegra/pmc.c
@@ -1321,7 +1321,7 @@  static void tegra_pmc_init_tsense_reset(struct tegra_pmc *pmc)
 	if (!pmc->soc->has_tsense_reset)
 		return;
 
-	np = of_find_node_by_name(pmc->dev->of_node, "i2c-thermtrip");
+	np = of_get_child_by_name(pmc->dev->of_node, "i2c-thermtrip");
 	if (!np) {
 		dev_warn(dev, "i2c-thermtrip node not found, %s.\n", disabled);
 		return;