[PATCH] drm/exynos: Fix potential NULL pointer dereference in suspend/resume paths

2017-10-09 Thread Marek Szyprowski
The patch 6e8edf8a7d8d: "drm/exynos: Fix suspend/resume support" introduced
a new code in suspend/resume paths. However it unconditionally dereference
drm_dev pointer, which might be NULL if suspend/resume happens before
Exynos DRM driver components bind. This patch fixes this issue.

Reported-by: Dan Carpenter 
Fixes: 6e8edf8a7d8d "drm/exynos: Fix suspend/resume support"
Signed-off-by: Marek Szyprowski 
---
 drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c 
b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index e651a58c18cf..aa770bb0153c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -168,11 +168,13 @@ static struct drm_driver exynos_drm_driver = {
 static int exynos_drm_suspend(struct device *dev)
 {
struct drm_device *drm_dev = dev_get_drvdata(dev);
-   struct exynos_drm_private *private = drm_dev->dev_private;
+   struct exynos_drm_private *private;
 
if (pm_runtime_suspended(dev) || !drm_dev)
return 0;
 
+   private = drm_dev->dev_private;
+
drm_kms_helper_poll_disable(drm_dev);
exynos_drm_fbdev_suspend(drm_dev);
private->suspend_state = drm_atomic_helper_suspend(drm_dev);
@@ -188,11 +190,12 @@ static int exynos_drm_suspend(struct device *dev)
 static int exynos_drm_resume(struct device *dev)
 {
struct drm_device *drm_dev = dev_get_drvdata(dev);
-   struct exynos_drm_private *private = drm_dev->dev_private;
+   struct exynos_drm_private *private;
 
if (pm_runtime_suspended(dev) || !drm_dev)
return 0;
 
+   private = drm_dev->dev_private;
drm_atomic_helper_resume(drm_dev, private->suspend_state);
exynos_drm_fbdev_resume(drm_dev);
drm_kms_helper_poll_enable(drm_dev);
-- 
2.14.2

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH] drm/exynos: Fix potential NULL pointer dereference

2012-09-21 Thread Inki Dae
Applied.

Thanks,
Inki Dae

2012/9/18 Sachin Kamat :
> drm_mode_create() returns NULL if it fails to create
> a new display mode. Check the value returned to avoid NULL
> pointer deferencing later.
>
> Signed-off-by: Sachin Kamat 
> ---
>  drivers/gpu/drm/exynos/exynos_drm_connector.c |6 +-
>  1 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c 
> b/drivers/gpu/drm/exynos/exynos_drm_connector.c
> index 9dce3b9..485e984 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_connector.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c
> @@ -149,8 +149,12 @@ static int exynos_drm_connector_get_modes(struct 
> drm_connector *connector)
> count = drm_add_edid_modes(connector, edid);
> kfree(edid);
> } else {
> -   struct drm_display_mode *mode = 
> drm_mode_create(connector->dev);
> struct exynos_drm_panel_info *panel;
> +   struct drm_display_mode *mode = 
> drm_mode_create(connector->dev);
> +   if (!mode) {
> +   DRM_ERROR("failed to create a new display mode.\n");
> +   return 0;
> +   }
>
> if (display_ops->get_panel)
> panel = display_ops->get_panel(manager->dev);
> --
> 1.7.4.1
>
> ___
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH] drm/exynos: Fix potential NULL pointer dereference

2012-09-20 Thread Inki Dae
Applied.

Thanks,
Inki Dae

2012/9/18 Sachin Kamat :
> drm_mode_create() returns NULL if it fails to create
> a new display mode. Check the value returned to avoid NULL
> pointer deferencing later.
>
> Signed-off-by: Sachin Kamat 
> ---
>  drivers/gpu/drm/exynos/exynos_drm_connector.c |6 +-
>  1 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c 
> b/drivers/gpu/drm/exynos/exynos_drm_connector.c
> index 9dce3b9..485e984 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_connector.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c
> @@ -149,8 +149,12 @@ static int exynos_drm_connector_get_modes(struct 
> drm_connector *connector)
> count = drm_add_edid_modes(connector, edid);
> kfree(edid);
> } else {
> -   struct drm_display_mode *mode = 
> drm_mode_create(connector->dev);
> struct exynos_drm_panel_info *panel;
> +   struct drm_display_mode *mode = 
> drm_mode_create(connector->dev);
> +   if (!mode) {
> +   DRM_ERROR("failed to create a new display mode.\n");
> +   return 0;
> +   }
>
> if (display_ops->get_panel)
> panel = display_ops->get_panel(manager->dev);
> --
> 1.7.4.1
>
> ___
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH] drm/exynos: Fix potential NULL pointer dereference

2012-09-18 Thread Sachin Kamat
drm_mode_create() returns NULL if it fails to create
a new display mode. Check the value returned to avoid NULL
pointer deferencing later.

Signed-off-by: Sachin Kamat 
---
 drivers/gpu/drm/exynos/exynos_drm_connector.c |6 +-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c 
b/drivers/gpu/drm/exynos/exynos_drm_connector.c
index 9dce3b9..485e984 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_connector.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c
@@ -149,8 +149,12 @@ static int exynos_drm_connector_get_modes(struct 
drm_connector *connector)
count = drm_add_edid_modes(connector, edid);
kfree(edid);
} else {
-   struct drm_display_mode *mode = drm_mode_create(connector->dev);
struct exynos_drm_panel_info *panel;
+   struct drm_display_mode *mode = drm_mode_create(connector->dev);
+   if (!mode) {
+   DRM_ERROR("failed to create a new display mode.\n");
+   return 0;
+   }

if (display_ops->get_panel)
panel = display_ops->get_panel(manager->dev);
-- 
1.7.4.1



[PATCH] drm/exynos: Fix potential NULL pointer dereference

2012-09-18 Thread Sachin Kamat
drm_mode_create() returns NULL if it fails to create
a new display mode. Check the value returned to avoid NULL
pointer deferencing later.

Signed-off-by: Sachin Kamat 
---
 drivers/gpu/drm/exynos/exynos_drm_connector.c |6 +-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c 
b/drivers/gpu/drm/exynos/exynos_drm_connector.c
index 9dce3b9..485e984 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_connector.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c
@@ -149,8 +149,12 @@ static int exynos_drm_connector_get_modes(struct 
drm_connector *connector)
count = drm_add_edid_modes(connector, edid);
kfree(edid);
} else {
-   struct drm_display_mode *mode = drm_mode_create(connector->dev);
struct exynos_drm_panel_info *panel;
+   struct drm_display_mode *mode = drm_mode_create(connector->dev);
+   if (!mode) {
+   DRM_ERROR("failed to create a new display mode.\n");
+   return 0;
+   }
 
if (display_ops->get_panel)
panel = display_ops->get_panel(manager->dev);
-- 
1.7.4.1

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel