* [PATCH 2/9] drm/mediatek: fix OF sibling-node lookup
[not found] <20180822105547.9634-1-johan@kernel.org>
@ 2018-08-22 10:55 ` Johan Hovold
2018-08-22 10:55 ` [PATCH 3/9] drm/msm: fix OF child-node lookup Johan Hovold
` (5 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Johan Hovold @ 2018-08-22 10:55 UTC (permalink / raw)
To: Rob Herring, Greg Kroah-Hartman
Cc: Frank Rowand, devicetree, linux-kernel, Johan Hovold, stable,
Jie Qiu, Junzhi Zhao, Philipp Zabel, CK Hu, David Airlie
Use the new of_get_compatible_child() helper to lookup the sibling
instead of using of_find_compatible_node(), which searches the entire
tree and thus can return an unrelated (i.e. non-sibling) node.
This also addresses a potential use-after-free (e.g. after probe
deferral) as the tree-wide helper drops a reference to its first
argument (i.e. the parent device node).
While at it, also fix the related cec-node reference leak.
Fixes: 8f83f26891e1 ("drm/mediatek: Add HDMI support")
Cc: stable <stable@vger.kernel.org> # 4.8
Cc: Jie Qiu <jie.qiu@mediatek.com>
Cc: Junzhi Zhao <junzhi.zhao@mediatek.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: David Airlie <airlied@linux.ie>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/gpu/drm/mediatek/mtk_hdmi.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
index 2d45d1dd9554..643f5edd68fe 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
@@ -1446,8 +1446,7 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
}
/* The CEC module handles HDMI hotplug detection */
- cec_np = of_find_compatible_node(np->parent, NULL,
- "mediatek,mt8173-cec");
+ cec_np = of_get_compatible_child(np->parent, "mediatek,mt8173-cec");
if (!cec_np) {
dev_err(dev, "Failed to find CEC node\n");
return -EINVAL;
@@ -1457,8 +1456,10 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
if (!cec_pdev) {
dev_err(hdmi->dev, "Waiting for CEC device %pOF\n",
cec_np);
+ of_node_put(cec_np);
return -EPROBE_DEFER;
}
+ of_node_put(cec_np);
hdmi->cec_dev = &cec_pdev->dev;
/*
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 3/9] drm/msm: fix OF child-node lookup
[not found] <20180822105547.9634-1-johan@kernel.org>
2018-08-22 10:55 ` [PATCH 2/9] drm/mediatek: fix OF sibling-node lookup Johan Hovold
@ 2018-08-22 10:55 ` Johan Hovold
2018-08-22 14:41 ` Rob Herring
2018-08-22 10:55 ` [PATCH 4/9] mmc: meson-mx-sdio: " Johan Hovold
` (4 subsequent siblings)
6 siblings, 1 reply; 12+ messages in thread
From: Johan Hovold @ 2018-08-22 10:55 UTC (permalink / raw)
To: Rob Herring, Greg Kroah-Hartman
Cc: Frank Rowand, devicetree, linux-kernel, Johan Hovold, stable,
Jordan Crouse, Rob Clark, David Airlie
Use the new of_get_compatible_child() helper to lookup the legacy
pwrlevels child node instead of using of_find_compatible_node(), which
searches the entire tree and thus can return an unrelated (i.e.
non-child) node.
This also addresses a potential use-after-free (e.g. after probe
deferral) as the tree-wide helper drops a reference to its first
argument (i.e. the probed device's node).
While at it, also fix the related child-node reference leak.
Fixes: e2af8b6b0ca1 ("drm/msm: gpu: Use OPP tables if we can")
Cc: stable <stable@vger.kernel.org> # 4.12
Cc: Jordan Crouse <jcrouse@codeaurora.org>
Cc: Rob Clark <robdclark@gmail.com>
Cc: David Airlie <airlied@linux.ie>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/gpu/drm/msm/adreno/adreno_gpu.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
index da1363a0c54d..93d70f4a2154 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
@@ -633,8 +633,7 @@ static int adreno_get_legacy_pwrlevels(struct device *dev)
struct device_node *child, *node;
int ret;
- node = of_find_compatible_node(dev->of_node, NULL,
- "qcom,gpu-pwrlevels");
+ node = of_get_compatible_child(dev->of_node, "qcom,gpu-pwrlevels");
if (!node) {
dev_err(dev, "Could not find the GPU powerlevels\n");
return -ENXIO;
@@ -655,6 +654,8 @@ static int adreno_get_legacy_pwrlevels(struct device *dev)
dev_pm_opp_add(dev, val, 0);
}
+ of_node_put(node);
+
return 0;
}
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 3/9] drm/msm: fix OF child-node lookup
2018-08-22 10:55 ` [PATCH 3/9] drm/msm: fix OF child-node lookup Johan Hovold
@ 2018-08-22 14:41 ` Rob Herring
0 siblings, 0 replies; 12+ messages in thread
From: Rob Herring @ 2018-08-22 14:41 UTC (permalink / raw)
To: Johan Hovold
Cc: Greg Kroah-Hartman, Frank Rowand, devicetree,
linux-kernel@vger.kernel.org, stable, Jordan Crouse, Rob Clark,
David Airlie
On Wed, Aug 22, 2018 at 5:57 AM Johan Hovold <johan@kernel.org> wrote:
>
> Use the new of_get_compatible_child() helper to lookup the legacy
> pwrlevels child node instead of using of_find_compatible_node(), which
> searches the entire tree and thus can return an unrelated (i.e.
> non-child) node.
>
> This also addresses a potential use-after-free (e.g. after probe
> deferral) as the tree-wide helper drops a reference to its first
> argument (i.e. the probed device's node).
>
> While at it, also fix the related child-node reference leak.
>
> Fixes: e2af8b6b0ca1 ("drm/msm: gpu: Use OPP tables if we can")
> Cc: stable <stable@vger.kernel.org> # 4.12
> Cc: Jordan Crouse <jcrouse@codeaurora.org>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: David Airlie <airlied@linux.ie>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
> drivers/gpu/drm/msm/adreno/adreno_gpu.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
> index da1363a0c54d..93d70f4a2154 100644
> --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
> +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
> @@ -633,8 +633,7 @@ static int adreno_get_legacy_pwrlevels(struct device *dev)
> struct device_node *child, *node;
> int ret;
>
> - node = of_find_compatible_node(dev->of_node, NULL,
> - "qcom,gpu-pwrlevels");
> + node = of_get_compatible_child(dev->of_node, "qcom,gpu-pwrlevels");
Not really your problem, but this is undocumented and a downstream
binding. There's been OPP support in addition for more than a year
now, we should just remove this code IMO. For some reason though, no
one updated the 8064 dts though.
Rob
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 4/9] mmc: meson-mx-sdio: fix OF child-node lookup
[not found] <20180822105547.9634-1-johan@kernel.org>
2018-08-22 10:55 ` [PATCH 2/9] drm/mediatek: fix OF sibling-node lookup Johan Hovold
2018-08-22 10:55 ` [PATCH 3/9] drm/msm: fix OF child-node lookup Johan Hovold
@ 2018-08-22 10:55 ` Johan Hovold
2018-08-23 18:50 ` Martin Blumenstingl
2018-08-22 10:55 ` [PATCH 5/9] mtd: nand: atmel: " Johan Hovold
` (3 subsequent siblings)
6 siblings, 1 reply; 12+ messages in thread
From: Johan Hovold @ 2018-08-22 10:55 UTC (permalink / raw)
To: Rob Herring, Greg Kroah-Hartman
Cc: Frank Rowand, devicetree, linux-kernel, Johan Hovold, stable,
Carlo Caione, Martin Blumenstingl, Ulf Hansson
Use the new of_get_compatible_child() helper to lookup the slot child
node instead of using of_find_compatible_node(), which searches the
entire tree and thus can return an unrelated (i.e. non-child) node.
This also addresses a potential use-after-free (e.g. after probe
deferral) as the tree-wide helper drops a reference to its first
argument (i.e. the node of the device being probed).
While at it, also fix up the related slot-node reference leak.
Fixes: ed80a13bb4c4 ("mmc: meson-mx-sdio: Add a driver for the Amlogic Meson8 and Meson8b SoCs")
Cc: stable <stable@vger.kernel.org> # 4.15
Cc: Carlo Caione <carlo@endlessm.com>
Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/mmc/host/meson-mx-sdio.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/host/meson-mx-sdio.c b/drivers/mmc/host/meson-mx-sdio.c
index 09cb89645d06..2cfec33178c1 100644
--- a/drivers/mmc/host/meson-mx-sdio.c
+++ b/drivers/mmc/host/meson-mx-sdio.c
@@ -517,19 +517,23 @@ static struct mmc_host_ops meson_mx_mmc_ops = {
static struct platform_device *meson_mx_mmc_slot_pdev(struct device *parent)
{
struct device_node *slot_node;
+ struct platform_device *pdev;
/*
* TODO: the MMC core framework currently does not support
* controllers with multiple slots properly. So we only register
* the first slot for now
*/
- slot_node = of_find_compatible_node(parent->of_node, NULL, "mmc-slot");
+ slot_node = of_get_compatible_child(parent->of_node, "mmc-slot");
if (!slot_node) {
dev_warn(parent, "no 'mmc-slot' sub-node found\n");
return ERR_PTR(-ENOENT);
}
- return of_platform_device_create(slot_node, NULL, parent);
+ pdev = of_platform_device_create(slot_node, NULL, parent);
+ of_node_put(slot_node);
+
+ return pdev;
}
static int meson_mx_mmc_add_host(struct meson_mx_mmc_host *host)
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 4/9] mmc: meson-mx-sdio: fix OF child-node lookup
2018-08-22 10:55 ` [PATCH 4/9] mmc: meson-mx-sdio: " Johan Hovold
@ 2018-08-23 18:50 ` Martin Blumenstingl
2018-08-24 6:41 ` Johan Hovold
0 siblings, 1 reply; 12+ messages in thread
From: Martin Blumenstingl @ 2018-08-23 18:50 UTC (permalink / raw)
To: johan
Cc: robh+dt, gregkh, frowand.list, devicetree, linux-kernel, stable,
carlo, ulf.hansson
Hi Johan,
On Wed, Aug 22, 2018 at 12:57 PM Johan Hovold <johan@kernel.org> wrote:
>
> Use the new of_get_compatible_child() helper to lookup the slot child
> node instead of using of_find_compatible_node(), which searches the
> entire tree and thus can return an unrelated (i.e. non-child) node.
that new helper is much appreciated, thank you!
> This also addresses a potential use-after-free (e.g. after probe
> deferral) as the tree-wide helper drops a reference to its first
> argument (i.e. the node of the device being probed).
>
> While at it, also fix up the related slot-node reference leak.
not sure why both issues went unnoticed so far - good that they're now
both fixed. thank you!
> Fixes: ed80a13bb4c4 ("mmc: meson-mx-sdio: Add a driver for the Amlogic Meson8 and Meson8b SoCs")
> Cc: stable <stable@vger.kernel.org> # 4.15
backporting only works if the patch introducing
of_get_compatible_child is also backported
do we have to inform Greg somehow?
> Cc: Carlo Caione <carlo@endlessm.com>
> Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Signed-off-by: Johan Hovold <johan@kernel.org>
Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Regards
Martin
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH 4/9] mmc: meson-mx-sdio: fix OF child-node lookup
2018-08-23 18:50 ` Martin Blumenstingl
@ 2018-08-24 6:41 ` Johan Hovold
0 siblings, 0 replies; 12+ messages in thread
From: Johan Hovold @ 2018-08-24 6:41 UTC (permalink / raw)
To: Martin Blumenstingl
Cc: johan, robh+dt, gregkh, frowand.list, devicetree, linux-kernel,
stable, carlo, ulf.hansson
On Thu, Aug 23, 2018 at 08:50:23PM +0200, Martin Blumenstingl wrote:
> On Wed, Aug 22, 2018 at 12:57 PM Johan Hovold <johan@kernel.org> wrote:
> > Fixes: ed80a13bb4c4 ("mmc: meson-mx-sdio: Add a driver for the Amlogic Meson8 and Meson8b SoCs")
> > Cc: stable <stable@vger.kernel.org> # 4.15
>
> backporting only works if the patch introducing
> of_get_compatible_child is also backported
> do we have to inform Greg somehow?
Greg is on CC, but he also sends out a notice in case a stable patch
fails to apply or compile.
Note that if the helper had gone in before the rest of the series, I
could have referenced it in the stable tags using its commit id in order
to facilitate the process:
Cc: stable <stable@vger.kernel.org> # 4.15: <commit id>
> > Cc: Carlo Caione <carlo@endlessm.com>
> > Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
> > Cc: Ulf Hansson <ulf.hansson@linaro.org>
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Thanks for the ack.
Johan
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 5/9] mtd: nand: atmel: fix OF child-node lookup
[not found] <20180822105547.9634-1-johan@kernel.org>
` (2 preceding siblings ...)
2018-08-22 10:55 ` [PATCH 4/9] mmc: meson-mx-sdio: " Johan Hovold
@ 2018-08-22 10:55 ` Johan Hovold
2018-08-22 10:55 ` [PATCH 6/9] net: bcmgenet: " Johan Hovold
` (2 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Johan Hovold @ 2018-08-22 10:55 UTC (permalink / raw)
To: Rob Herring, Greg Kroah-Hartman
Cc: Frank Rowand, devicetree, linux-kernel, Johan Hovold, stable,
Nicolas Ferre, Josh Wu, Boris Brezillon
Use the new of_get_compatible_child() helper to lookup the nfc child
node instead of using of_find_compatible_node(), which searches the
entire tree and thus can return an unrelated (i.e. non-child) node.
This also addresses a potential use-after-free (e.g. after probe
deferral) as the tree-wide helper drops a reference to its first
argument (i.e. the node of the device being probed).
While at it, also fix a related nfc-node reference leak.
Fixes: f88fc122cc34 ("mtd: nand: Cleanup/rework the atmel_nand driver")
Cc: stable <stable@vger.kernel.org> # 4.11
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Josh Wu <rainyfeeling@outlook.com>
Cc: Boris Brezillon <boris.brezillon@bootlin.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/mtd/nand/raw/atmel/nand-controller.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/nand/raw/atmel/nand-controller.c b/drivers/mtd/nand/raw/atmel/nand-controller.c
index a068b214ebaa..d3dfe63956ac 100644
--- a/drivers/mtd/nand/raw/atmel/nand-controller.c
+++ b/drivers/mtd/nand/raw/atmel/nand-controller.c
@@ -2061,8 +2061,7 @@ atmel_hsmc_nand_controller_legacy_init(struct atmel_hsmc_nand_controller *nc)
int ret;
nand_np = dev->of_node;
- nfc_np = of_find_compatible_node(dev->of_node, NULL,
- "atmel,sama5d3-nfc");
+ nfc_np = of_get_compatible_child(dev->of_node, "atmel,sama5d3-nfc");
nc->clk = of_clk_get(nfc_np, 0);
if (IS_ERR(nc->clk)) {
@@ -2472,15 +2471,19 @@ static int atmel_nand_controller_probe(struct platform_device *pdev)
}
if (caps->legacy_of_bindings) {
+ struct device_node *nfc_node;
u32 ale_offs = 21;
/*
* If we are parsing legacy DT props and the DT contains a
* valid NFC node, forward the request to the sama5 logic.
*/
- if (of_find_compatible_node(pdev->dev.of_node, NULL,
- "atmel,sama5d3-nfc"))
+ nfc_node = of_get_compatible_child(pdev->dev.of_node,
+ "atmel,sama5d3-nfc");
+ if (nfc_node) {
caps = &atmel_sama5_nand_caps;
+ of_node_put(nfc_node);
+ }
/*
* Even if the compatible says we are dealing with an
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 6/9] net: bcmgenet: fix OF child-node lookup
[not found] <20180822105547.9634-1-johan@kernel.org>
` (3 preceding siblings ...)
2018-08-22 10:55 ` [PATCH 5/9] mtd: nand: atmel: " Johan Hovold
@ 2018-08-22 10:55 ` Johan Hovold
2018-08-22 10:55 ` [PATCH 8/9] NFC: nfcmrvl_uart: " Johan Hovold
2018-08-22 10:55 ` [PATCH 9/9] power: supply: twl4030-charger: fix OF sibling-node lookup Johan Hovold
6 siblings, 0 replies; 12+ messages in thread
From: Johan Hovold @ 2018-08-22 10:55 UTC (permalink / raw)
To: Rob Herring, Greg Kroah-Hartman
Cc: Frank Rowand, devicetree, linux-kernel, Johan Hovold, stable,
Florian Fainelli, David S . Miller
Use the new of_get_compatible_child() helper to lookup the mdio child
node instead of using of_find_compatible_node(), which searches the
entire tree and thus can return an unrelated (i.e. non-child) node.
This also addresses a potential use-after-free (e.g. after probe
deferral) as the tree-wide helper drops a reference to its first
argument (i.e. the node of the device being probed).
Fixes: aa09677cba42 ("net: bcmgenet: add MDIO routines")
Cc: stable <stable@vger.kernel.org> # 3.15
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/net/ethernet/broadcom/genet/bcmmii.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c
index 5333274a283c..87fc65560ceb 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
@@ -333,7 +333,7 @@ static struct device_node *bcmgenet_mii_of_find_mdio(struct bcmgenet_priv *priv)
if (!compat)
return NULL;
- priv->mdio_dn = of_find_compatible_node(dn, NULL, compat);
+ priv->mdio_dn = of_get_compatible_child(dn, compat);
kfree(compat);
if (!priv->mdio_dn) {
dev_err(kdev, "unable to find MDIO bus node\n");
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 8/9] NFC: nfcmrvl_uart: fix OF child-node lookup
[not found] <20180822105547.9634-1-johan@kernel.org>
` (4 preceding siblings ...)
2018-08-22 10:55 ` [PATCH 6/9] net: bcmgenet: " Johan Hovold
@ 2018-08-22 10:55 ` Johan Hovold
2018-08-22 10:55 ` [PATCH 9/9] power: supply: twl4030-charger: fix OF sibling-node lookup Johan Hovold
6 siblings, 0 replies; 12+ messages in thread
From: Johan Hovold @ 2018-08-22 10:55 UTC (permalink / raw)
To: Rob Herring, Greg Kroah-Hartman
Cc: Frank Rowand, devicetree, linux-kernel, Johan Hovold, stable,
Vincent Cuissard, Samuel Ortiz
Use the new of_get_compatible_child() helper to lookup the nfc child
node instead of using of_find_compatible_node(), which searches the
entire tree and thus can return an unrelated (i.e. non-child) node.
This also addresses a potential use-after-free (e.g. after probe
deferral) as the tree-wide helper drops a reference to its first
argument (i.e. the parent node).
Fixes: e097dc624f78 ("NFC: nfcmrvl: add UART driver")
Fixes: d8e018c0b321 ("NFC: nfcmrvl: update device tree bindings for Marvell NFC")
Cc: stable <stable@vger.kernel.org> # 4.2
Cc: Vincent Cuissard <cuissard@marvell.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/nfc/nfcmrvl/uart.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/nfc/nfcmrvl/uart.c b/drivers/nfc/nfcmrvl/uart.c
index 91162f8e0366..9a22056e8d9e 100644
--- a/drivers/nfc/nfcmrvl/uart.c
+++ b/drivers/nfc/nfcmrvl/uart.c
@@ -73,10 +73,9 @@ static int nfcmrvl_uart_parse_dt(struct device_node *node,
struct device_node *matched_node;
int ret;
- matched_node = of_find_compatible_node(node, NULL, "marvell,nfc-uart");
+ matched_node = of_get_compatible_child(node, "marvell,nfc-uart");
if (!matched_node) {
- matched_node = of_find_compatible_node(node, NULL,
- "mrvl,nfc-uart");
+ matched_node = of_get_compatible_child(node, "mrvl,nfc-uart");
if (!matched_node)
return -ENODEV;
}
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 9/9] power: supply: twl4030-charger: fix OF sibling-node lookup
[not found] <20180822105547.9634-1-johan@kernel.org>
` (5 preceding siblings ...)
2018-08-22 10:55 ` [PATCH 8/9] NFC: nfcmrvl_uart: " Johan Hovold
@ 2018-08-22 10:55 ` Johan Hovold
2018-08-22 21:36 ` Sebastian Reichel
6 siblings, 1 reply; 12+ messages in thread
From: Johan Hovold @ 2018-08-22 10:55 UTC (permalink / raw)
To: Rob Herring, Greg Kroah-Hartman
Cc: Frank Rowand, devicetree, linux-kernel, Johan Hovold, stable,
NeilBrown, Felipe Balbi, Sebastian Reichel
Use the new of_get_compatible_child() helper to lookup the usb sibling
node instead of using of_find_compatible_node(), which searches the
entire tree and thus can return an unrelated (non-sibling) node.
This also addresses a potential use-after-free (e.g. after probe
deferral) as the tree-wide helper drops a reference to its first
argument (i.e. the parent device node).
While at it, also fix the related phy-node reference leak.
Fixes: f5e4edb8c888 ("power: twl4030_charger: find associated phy by more reliable means.")
Cc: stable <stable@vger.kernel.org> # 4.2
Cc: NeilBrown <neilb@suse.de>
Cc: Felipe Balbi <balbi@ti.com>
Cc: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/power/supply/twl4030_charger.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/power/supply/twl4030_charger.c b/drivers/power/supply/twl4030_charger.c
index bbcaee56db9d..b6a7d9f74cf3 100644
--- a/drivers/power/supply/twl4030_charger.c
+++ b/drivers/power/supply/twl4030_charger.c
@@ -996,12 +996,13 @@ static int twl4030_bci_probe(struct platform_device *pdev)
if (bci->dev->of_node) {
struct device_node *phynode;
- phynode = of_find_compatible_node(bci->dev->of_node->parent,
- NULL, "ti,twl4030-usb");
+ phynode = of_get_compatible_child(bci->dev->of_node->parent,
+ "ti,twl4030-usb");
if (phynode) {
bci->usb_nb.notifier_call = twl4030_bci_usb_ncb;
bci->transceiver = devm_usb_get_phy_by_node(
bci->dev, phynode, &bci->usb_nb);
+ of_node_put(phynode);
if (IS_ERR(bci->transceiver)) {
ret = PTR_ERR(bci->transceiver);
if (ret == -EPROBE_DEFER)
--
2.18.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 9/9] power: supply: twl4030-charger: fix OF sibling-node lookup
2018-08-22 10:55 ` [PATCH 9/9] power: supply: twl4030-charger: fix OF sibling-node lookup Johan Hovold
@ 2018-08-22 21:36 ` Sebastian Reichel
2018-08-23 7:40 ` Johan Hovold
0 siblings, 1 reply; 12+ messages in thread
From: Sebastian Reichel @ 2018-08-22 21:36 UTC (permalink / raw)
To: Johan Hovold
Cc: Rob Herring, Greg Kroah-Hartman, Frank Rowand, devicetree,
linux-kernel, stable, NeilBrown, Felipe Balbi
[-- Attachment #1: Type: text/plain, Size: 1951 bytes --]
Hi,
On Wed, Aug 22, 2018 at 12:55:47PM +0200, Johan Hovold wrote:
> Use the new of_get_compatible_child() helper to lookup the usb sibling
> node instead of using of_find_compatible_node(), which searches the
> entire tree and thus can return an unrelated (non-sibling) node.
>
> This also addresses a potential use-after-free (e.g. after probe
> deferral) as the tree-wide helper drops a reference to its first
> argument (i.e. the parent device node).
>
> While at it, also fix the related phy-node reference leak.
>
> Fixes: f5e4edb8c888 ("power: twl4030_charger: find associated phy by more reliable means.")
> Cc: stable <stable@vger.kernel.org> # 4.2
> Cc: NeilBrown <neilb@suse.de>
> Cc: Felipe Balbi <balbi@ti.com>
> Cc: Sebastian Reichel <sre@kernel.org>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
Reviewed-by: Sebastian Reichel <sre@kernel.org>
-- Sebastian
> drivers/power/supply/twl4030_charger.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/power/supply/twl4030_charger.c b/drivers/power/supply/twl4030_charger.c
> index bbcaee56db9d..b6a7d9f74cf3 100644
> --- a/drivers/power/supply/twl4030_charger.c
> +++ b/drivers/power/supply/twl4030_charger.c
> @@ -996,12 +996,13 @@ static int twl4030_bci_probe(struct platform_device *pdev)
> if (bci->dev->of_node) {
> struct device_node *phynode;
>
> - phynode = of_find_compatible_node(bci->dev->of_node->parent,
> - NULL, "ti,twl4030-usb");
> + phynode = of_get_compatible_child(bci->dev->of_node->parent,
> + "ti,twl4030-usb");
> if (phynode) {
> bci->usb_nb.notifier_call = twl4030_bci_usb_ncb;
> bci->transceiver = devm_usb_get_phy_by_node(
> bci->dev, phynode, &bci->usb_nb);
> + of_node_put(phynode);
> if (IS_ERR(bci->transceiver)) {
> ret = PTR_ERR(bci->transceiver);
> if (ret == -EPROBE_DEFER)
> --
> 2.18.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH 9/9] power: supply: twl4030-charger: fix OF sibling-node lookup
2018-08-22 21:36 ` Sebastian Reichel
@ 2018-08-23 7:40 ` Johan Hovold
0 siblings, 0 replies; 12+ messages in thread
From: Johan Hovold @ 2018-08-23 7:40 UTC (permalink / raw)
To: Sebastian Reichel
Cc: Johan Hovold, Rob Herring, Greg Kroah-Hartman, Frank Rowand,
devicetree, linux-kernel, stable, NeilBrown, Felipe Balbi
On Wed, Aug 22, 2018 at 11:36:58PM +0200, Sebastian Reichel wrote:
> Hi,
>
> On Wed, Aug 22, 2018 at 12:55:47PM +0200, Johan Hovold wrote:
> > Use the new of_get_compatible_child() helper to lookup the usb sibling
> > node instead of using of_find_compatible_node(), which searches the
> > entire tree and thus can return an unrelated (non-sibling) node.
> >
> > This also addresses a potential use-after-free (e.g. after probe
> > deferral) as the tree-wide helper drops a reference to its first
> > argument (i.e. the parent device node).
> >
> > While at it, also fix the related phy-node reference leak.
> >
> > Fixes: f5e4edb8c888 ("power: twl4030_charger: find associated phy by more reliable means.")
> > Cc: stable <stable@vger.kernel.org> # 4.2
> > Cc: NeilBrown <neilb@suse.de>
> > Cc: Felipe Balbi <balbi@ti.com>
> > Cc: Sebastian Reichel <sre@kernel.org>
> > Signed-off-by: Johan Hovold <johan@kernel.org>
> > ---
>
> Reviewed-by: Sebastian Reichel <sre@kernel.org>
Thanks for reviewing.
Johan
^ permalink raw reply [flat|nested] 12+ messages in thread