[PATCH 0/9] of: fix compatible-child-node lookups

From: Johan Hovold
Date: Wed Aug 22 2018 - 06:58:13 EST


Several drivers currently use of_find_compatible_node() to lookup child
nodes while failing to notice that the of_find_ functions search the
entire tree depth-first and therefore can match unrelated (non-child)
nodes.

The fact that these functions also drop a reference to the node they
start searching from (e.g. the parent node) is typically also
overlooked, something which can lead to use-after-free bugs (e.g. after
probe deferrals).

This series adds a new helper, similar to of_get_child_by_name(),
that can be used to lookup compatible child nodes, and uses the new
helper to fix child-node lookups throughout the tree.

This is related to the fixes I posted about a year ago, which addressed
a similar anti-pattern when looking up child nodes by name. Since it
took me more than a year to get all those fixes into Linus' tree (one
fix is still pending), and as these fixes depend on the new helper, I'm
suggesting that these all go in through Rob's or Greg's trees.

Alternatively, the helper could go into to -rc2, and I'll be pinging
submaintainers for coming year as well. ;)

Johan


Johan Hovold (9):
of: add helper to lookup compatible child node
drm/mediatek: fix OF sibling-node lookup
drm/msm: fix OF child-node lookup
mmc: meson-mx-sdio: fix OF child-node lookup
mtd: nand: atmel: fix OF child-node lookup
net: bcmgenet: fix OF child-node lookup
net: stmmac: dwmac-sun8i: fix OF child-node lookup
NFC: nfcmrvl_uart: fix OF child-node lookup
power: supply: twl4030-charger: fix OF sibling-node lookup

drivers/gpu/drm/mediatek/mtk_hdmi.c | 5 ++--
drivers/gpu/drm/msm/adreno/adreno_gpu.c | 5 ++--
drivers/mmc/host/meson-mx-sdio.c | 8 ++++--
drivers/mtd/nand/raw/atmel/nand-controller.c | 11 +++++---
drivers/net/ethernet/broadcom/genet/bcmmii.c | 2 +-
.../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 12 +++++++--
drivers/nfc/nfcmrvl/uart.c | 5 ++--
drivers/of/base.c | 25 +++++++++++++++++++
drivers/power/supply/twl4030_charger.c | 5 ++--
include/linux/of.h | 8 ++++++
10 files changed, 68 insertions(+), 18 deletions(-)

--
2.18.0