drm/bridge: aux-hpd: fix OF node leaks
authorJohan Hovold <johan+linaro@kernel.org>
Sat, 17 Feb 2024 15:02:23 +0000 (16:02 +0100)
committerNeil Armstrong <neil.armstrong@linaro.org>
Fri, 23 Feb 2024 10:59:37 +0000 (11:59 +0100)
The two device node references taken during allocation need to be
dropped when the auxiliary device is freed.

Fixes: 6914968a0b52 ("drm/bridge: properly refcount DT nodes in aux bridge drivers")
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20240217150228.5788-2-johan+linaro@kernel.org
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240217150228.5788-2-johan+linaro@kernel.org
drivers/gpu/drm/bridge/aux-hpd-bridge.c

index bb55f697a1819264e1320f6118d28dd776236f4f..9e71daf95bde7db4aa1e3c771557f0ff8d2e53d7 100644 (file)
@@ -25,6 +25,7 @@ static void drm_aux_hpd_bridge_release(struct device *dev)
        ida_free(&drm_aux_hpd_bridge_ida, adev->id);
 
        of_node_put(adev->dev.platform_data);
+       of_node_put(adev->dev.of_node);
 
        kfree(adev);
 }
@@ -74,6 +75,8 @@ struct device *drm_dp_hpd_bridge_register(struct device *parent,
 
        ret = auxiliary_device_init(adev);
        if (ret) {
+               of_node_put(adev->dev.platform_data);
+               of_node_put(adev->dev.of_node);
                ida_free(&drm_aux_hpd_bridge_ida, adev->id);
                kfree(adev);
                return ERR_PTR(ret);