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)
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
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
linux-stable-mirror@lists.linaro.org