it6505_parse_dt() drops the reference to each endpoint node right
after looking it up and then keeps reading its properties, racing
with the node being freed under CONFIG_OF_DYNAMIC. Put the node only
once parsing is done.

Fixes: 380d920b582d ("drm/bridge: add it6505 driver to read data-lanes and 
link-frequencies from dt")
Signed-off-by: Daniel Golle <[email protected]>
---
v6: no changes

v5: new patch

 drivers/gpu/drm/bridge/ite-it6505.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/bridge/ite-it6505.c 
b/drivers/gpu/drm/bridge/ite-it6505.c
index f4ee5c81d3b8..0da8b40dd88a 100644
--- a/drivers/gpu/drm/bridge/ite-it6505.c
+++ b/drivers/gpu/drm/bridge/ite-it6505.c
@@ -3366,7 +3366,6 @@ static void it6505_parse_dt(struct it6505 *it6505)
        }
 
        ep = of_graph_get_endpoint_by_regs(np, 1, 0);
-       of_node_put(ep);
 
        if (ep) {
                len = it6505_get_data_lanes_count(ep, 1, 4);
@@ -3379,13 +3378,13 @@ static void it6505_parse_dt(struct it6505 *it6505)
                        *max_lane_count = MAX_LANE_COUNT;
                        dev_err(dev, "error data-lanes, use default");
                }
+               of_node_put(ep);
        } else {
                *max_lane_count = MAX_LANE_COUNT;
                dev_err(dev, "error endpoint, use default");
        }
 
        ep = of_graph_get_endpoint_by_regs(np, 0, 0);
-       of_node_put(ep);
 
        if (ep) {
                len = of_property_read_variable_u64_array(ep,
@@ -3405,6 +3404,7 @@ static void it6505_parse_dt(struct it6505 *it6505)
                        dev_err(dev, "error link frequencies, use default");
                        *max_dpi_pixel_clock = DPI_PIXEL_CLK_MAX;
                }
+               of_node_put(ep);
        } else {
                dev_err(dev, "error endpoint, use default");
                *max_dpi_pixel_clock = DPI_PIXEL_CLK_MAX;
-- 
2.55.0

Reply via email to