All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johan Hovold <johan@kernel.org>
To: Peter Chen <hzpeterchen@gmail.com>
Cc: Johan Hovold <johan@kernel.org>,
	Stephen Boyd <stephen.boyd@linaro.org>,
	Peter Chen <Peter.Chen@nxp.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	stable <stable@vger.kernel.org>,
	Frank Rowand <frank.rowand@sony.com>
Subject: Re: [PATCH] USB: chipidea: msm: fix ulpi-node lookup
Date: Tue, 12 Dec 2017 13:59:29 +0100	[thread overview]
Message-ID: <20171212125929.GA5185@localhost> (raw)
In-Reply-To: <20171212030816.GB22364@b29397-desktop>

On Tue, Dec 12, 2017 at 11:08:17AM +0800, Peter Chen wrote:
> On Mon, Nov 13, 2017 at 11:12: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.
> > 
> > Note that the original premature free of the parent node has already
> > been fixed separately, but that fix was apparently never backported to
> > stable.
> > 
> > Fixes: 47654a162081 ("usb: chipidea: msm: Restore wrapper settings after reset")
> > Fixes: b74c43156c0c ("usb: chipidea: msm: ci_hdrc_msm_probe() missing of_node_get()")
> > Cc: stable <stable@vger.kernel.org>     # 4.10: b74c43156c0c
> > Cc: Stephen Boyd <stephen.boyd@linaro.org>
> > Cc: Frank Rowand <frank.rowand@sony.com>
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> > ---
> >  drivers/usb/chipidea/ci_hdrc_msm.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
> > index 3593ce0ec641..880009987460 100644
> > --- a/drivers/usb/chipidea/ci_hdrc_msm.c
> > +++ b/drivers/usb/chipidea/ci_hdrc_msm.c
> > @@ -247,7 +247,7 @@ static int ci_hdrc_msm_probe(struct platform_device *pdev)
> >  	if (ret)
> >  		goto err_mux;
> >  
> > -	ulpi_node = of_find_node_by_name(of_node_get(pdev->dev.of_node), "ulpi");
> > +	ulpi_node = of_get_child_by_name(pdev->dev.of_node, "ulpi");
> 
> Stephen, would you comment on it? I am afraid I can't find the benefit
> for this change.

The general problem is that several drivers were using the wrong
OF-helper when looking up child nodes. This meant that instead of just
matching on child nodes, a tree-wide, depth-first search was done,
something which could end up matching an unrelated node elsewhere in the
device tree.

To make things worse, most erroneous users of of_find_node_by_name(),
also failed to notice that that function drops a reference to its first
argument, something which can lead to use-after-free and crashes, for
example, after probe deferrals.

In this case, it looks like the child node is looked-up to determine
whether to enable a hardware quirk. The potential use-after-free has
already been fixed up (by adding the missing of_node_get()), but that
fix was never backported to stable.

This patch addresses both issues (tree-wide search + unbalanced put in
stable), while removing buggy code which could otherwise end up being
reproduced in yet another driver.

Johan

  reply	other threads:[~2017-12-12 12:59 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-13 10:12 [PATCH] USB: chipidea: msm: fix ulpi-node lookup Johan Hovold
2017-12-12  3:08 ` Peter Chen
2017-12-12 12:59   ` Johan Hovold [this message]
2017-12-13  1:49     ` Peter Chen

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=20171212125929.GA5185@localhost \
    --to=johan@kernel.org \
    --cc=Peter.Chen@nxp.com \
    --cc=frank.rowand@sony.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hzpeterchen@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=stephen.boyd@linaro.org \
    /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.