drm/exynos: dpi: Fix NULL pointer dereference with legacy bindings
authorTomasz Figa <tomasz.figa@gmail.com>
Tue, 10 Jun 2014 20:57:57 +0000 (22:57 +0200)
committerInki Dae <inki.dae@samsung.com>
Tue, 24 Jun 2014 02:11:54 +0000 (11:11 +0900)
If there is no panel node in DT and instead display timings are provided
directly in FIMD node, there is no panel object created and ctx->panel
becomes NULL. However during Exynos DRM initialization
drm_helper_hpd_irq_event() is called, which in turns calls
exynos_dpi_detect(), which dereferences ctx->panel without a check,
causing a NULL pointer derefrence.

This patch fixes the issue by adding necessary NULL pointer check.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
Reviewed-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos_drm_dpi.c

index 482127f633c573fe84db8faffbe7cf5210df7ac3..9e530f205ad2244f13fdea07e6ec1b322f94550a 100644 (file)
@@ -40,7 +40,7 @@ exynos_dpi_detect(struct drm_connector *connector, bool force)
 {
        struct exynos_dpi *ctx = connector_to_dpi(connector);
 
-       if (!ctx->panel->connector)
+       if (ctx->panel && !ctx->panel->connector)
                drm_panel_attach(ctx->panel, &ctx->connector);
 
        return connector_status_connected;