diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/805-display-0046-MLK-22171-drm-imx-Avoid-leaking-dangling-pointer-dev.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/805-display-0046-MLK-22171-drm-imx-Avoid-leaking-dangling-pointer-dev.patch | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/805-display-0046-MLK-22171-drm-imx-Avoid-leaking-dangling-pointer-dev.patch b/target/linux/layerscape/patches-5.4/805-display-0046-MLK-22171-drm-imx-Avoid-leaking-dangling-pointer-dev.patch new file mode 100644 index 0000000000..b65727def6 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/805-display-0046-MLK-22171-drm-imx-Avoid-leaking-dangling-pointer-dev.patch @@ -0,0 +1,37 @@ +From 98917e88ec975eee0194ca011479e507029009ae Mon Sep 17 00:00:00 2001 +From: Liu Ying <victor.liu@nxp.com> +Date: Tue, 30 Jul 2019 13:13:16 +0800 +Subject: [PATCH] MLK-22171 drm/imx: Avoid leaking dangling pointer + dev->driver_data to PM ops + +In case ->bind() fails, we should avoid leaking dangling pointer +dev->driver_data which is set by dev_set_drvdata(), otherwise +it would be leaked, and seen/dereferenced by PM ops, thus hang +happens. Moving dev_set_drvdata() down just before ->bind() +successfully returns may address this issue. + +Signed-off-by: Liu Ying <victor.liu@nxp.com> +--- + drivers/gpu/drm/imx/imx-drm-core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/imx/imx-drm-core.c ++++ b/drivers/gpu/drm/imx/imx-drm-core.c +@@ -158,8 +158,6 @@ static int imx_drm_bind(struct device *d + if (ret) + goto err_kms; + +- dev_set_drvdata(dev, drm); +- + /* Now try and bind all our sub-components */ + ret = component_bind_all(dev, drm); + if (ret) +@@ -185,6 +183,8 @@ static int imx_drm_bind(struct device *d + + drm_fbdev_generic_setup(drm, legacyfb_depth); + ++ dev_set_drvdata(dev, drm); ++ + return 0; + + err_poll_fini: |