Re: [PATCH] drm/exynos: Check for NULL dereference of crtc

2015-03-07 Thread Inki Dae
On 2015년 03월 06일 23:04, Charles Keepax wrote:
> On Fri, Mar 06, 2015 at 10:13:42PM +0900, Inki Dae wrote:
>> On 2015년 02월 18일 02:14, Charles Keepax wrote:
>>> The commit "drm/exynos: remove exynos_plane_dpms" (d9ea6256) removed the
>>> use of the enabled flag, which means that the code may attempt to call
>>> win_enable on a NULL crtc. This results in the following oops on
>>
>> Hmm... it's strange. plane->funcs->destroy() is called prior to
>> crtc->funcs->destroy() so it should be exynos_crtc is not NULL. However,
>> it seems there is any corner case we didn't catch up.
>>
>> Applied.
> 
> Thanks, it seems the offending path in an error path, looks like
> Arndale is missing some required DT setting which causes
> exynos_drm_load to fail:

Right. With quick look, it seems that this issue is incurred because it
tried to access plane->crtc object to call win_disable callback of FIMD
driver before mode_set callback is called: plane->crtc would be set by
mode_set callback so if it has no pair of encoder and crtc then the
plane can never point a crtc object created by FIMD driver.

Thanks,
Inki Dae

> 
> [1.638109] of_graph_get_next_endpoint(): no port node found in 
> /dp-controller@145B
> [1.646424] exynos-drm exynos-drm: bound 1440.fimd (ops 
> fimd_component_ops)
> [1.652704] /dp-controller@145B: could not find display-timings node
> [1.659323] /dp-controller@145B: no timings specified
> [1.664709] [drm:exynos_dp_bind] *ERROR* failed: of_get_videomode() : -22
> [1.671485] exynos-drm exynos-drm: failed to bind 145b.dp-controller 
> (ops exynos_dp_ops): -22
> 
> Which ends up calling exynos_plane_destroy as part of the clean up:
> 
> [1.698655] [] (unwind_backtrace) from [] 
> (show_stack+0x20/0x24)
> [1.706385] [] (show_stack) from [] 
> (dump_stack+0x78/0xc4)
> [1.713588] [] (dump_stack) from [] 
> (exynos_disable_plane+0x2c/0x60)
> [1.721660] [] (exynos_disable_plane) from [] 
> (exynos_plane_destroy+0x1c/0x30)
> [1.730605] [] (exynos_plane_destroy) from [] 
> (drm_mode_config_cleanup+0x168/0x20c)
> [1.739982] [] (drm_mode_config_cleanup) from [] 
> (exynos_drm_load+0xac/0x12c)
> [1.748832] [] (exynos_drm_load) from [] 
> (drm_dev_register+0xb0/0x110)
> [1.757075] [] (drm_dev_register) from [] 
> (drm_platform_init+0x50/0xe0)
> [1.765405] [] (drm_platform_init) from [] 
> (exynos_drm_bind+0x20/0x28)
> [1.773655] [] (exynos_drm_bind) from [] 
> (try_to_bring_up_master.part.1+0xd8/0x114)
> [1.783027] [] (try_to_bring_up_master.part.1) from [] 
> (component_master_add_with_match+0xb4/0x134)
> [1.793792] [] (component_master_add_with_match) from 
> [] (exynos_drm_platform_probe+0xfc/0x124)
> [1.804207] [] (exynos_drm_platform_probe) from [] 
> (platform_drv_probe+0x58/0xb4)
> [1.813411] [] (platform_drv_probe) from [] 
> (driver_probe_device+0x11c/0x23c)
> [1.822261] [] (driver_probe_device) from [] 
> (__driver_attach+0x9c/0xa0)
> [1.830679] [] (__driver_attach) from [] 
> (bus_for_each_dev+0x64/0x98)
> [1.838838] [] (bus_for_each_dev) from [] 
> (driver_attach+0x2c/0x30)
> [1.846824] [] (driver_attach) from [] 
> (bus_add_driver+0xe8/0x1e4)
> [1.854722] [] (bus_add_driver) from [] 
> (driver_register+0x88/0x104)
> [1.862794] [] (driver_register) from [] 
> (__platform_driver_register+0x58/0x6c)
> [1.871827] [] (__platform_driver_register) from [] 
> (exynos_drm_init+0xc8/0x124)
> [1.880936] [] (exynos_drm_init) from [] 
> (do_one_initcall+0x90/0x1e0)
> [1.889096] [] (do_one_initcall) from [] 
> (kernel_init_freeable+0x114/0x1e0)
> [1.897779] [] (kernel_init_freeable) from [] 
> (kernel_init+0x18/0xfc)
> [1.905934] [] (kernel_init) from [] 
> (ret_from_fork+0x14/0x34)
> 
> Hope that helps some, afraid I am not really familiar enough with
> the graphics stack to chase that down much more though.
> 
> Thanks,
> Charles
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" 
> in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] drm/exynos: Check for NULL dereference of crtc

2015-03-07 Thread Inki Dae
On 2015년 03월 06일 23:04, Charles Keepax wrote:
 On Fri, Mar 06, 2015 at 10:13:42PM +0900, Inki Dae wrote:
 On 2015년 02월 18일 02:14, Charles Keepax wrote:
 The commit drm/exynos: remove exynos_plane_dpms (d9ea6256) removed the
 use of the enabled flag, which means that the code may attempt to call
 win_enable on a NULL crtc. This results in the following oops on

 Hmm... it's strange. plane-funcs-destroy() is called prior to
 crtc-funcs-destroy() so it should be exynos_crtc is not NULL. However,
 it seems there is any corner case we didn't catch up.

 Applied.
 
 Thanks, it seems the offending path in an error path, looks like
 Arndale is missing some required DT setting which causes
 exynos_drm_load to fail:

Right. With quick look, it seems that this issue is incurred because it
tried to access plane-crtc object to call win_disable callback of FIMD
driver before mode_set callback is called: plane-crtc would be set by
mode_set callback so if it has no pair of encoder and crtc then the
plane can never point a crtc object created by FIMD driver.

Thanks,
Inki Dae

 
 [1.638109] of_graph_get_next_endpoint(): no port node found in 
 /dp-controller@145B
 [1.646424] exynos-drm exynos-drm: bound 1440.fimd (ops 
 fimd_component_ops)
 [1.652704] /dp-controller@145B: could not find display-timings node
 [1.659323] /dp-controller@145B: no timings specified
 [1.664709] [drm:exynos_dp_bind] *ERROR* failed: of_get_videomode() : -22
 [1.671485] exynos-drm exynos-drm: failed to bind 145b.dp-controller 
 (ops exynos_dp_ops): -22
 
 Which ends up calling exynos_plane_destroy as part of the clean up:
 
 [1.698655] [c0015db4] (unwind_backtrace) from [c00121cc] 
 (show_stack+0x20/0x24)
 [1.706385] [c00121cc] (show_stack) from [c0528230] 
 (dump_stack+0x78/0xc4)
 [1.713588] [c0528230] (dump_stack) from [c02f72ec] 
 (exynos_disable_plane+0x2c/0x60)
 [1.721660] [c02f72ec] (exynos_disable_plane) from [c02f733c] 
 (exynos_plane_destroy+0x1c/0x30)
 [1.730605] [c02f733c] (exynos_plane_destroy) from [c02e37c4] 
 (drm_mode_config_cleanup+0x168/0x20c)
 [1.739982] [c02e37c4] (drm_mode_config_cleanup) from [c02f3d18] 
 (exynos_drm_load+0xac/0x12c)
 [1.748832] [c02f3d18] (exynos_drm_load) from [c02dc074] 
 (drm_dev_register+0xb0/0x110)
 [1.757075] [c02dc074] (drm_dev_register) from [c02ddc88] 
 (drm_platform_init+0x50/0xe0)
 [1.765405] [c02ddc88] (drm_platform_init) from [c02f3a08] 
 (exynos_drm_bind+0x20/0x28)
 [1.773655] [c02f3a08] (exynos_drm_bind) from [c02fe664] 
 (try_to_bring_up_master.part.1+0xd8/0x114)
 [1.783027] [c02fe664] (try_to_bring_up_master.part.1) from [c02fe754] 
 (component_master_add_with_match+0xb4/0x134)
 [1.793792] [c02fe754] (component_master_add_with_match) from 
 [c02f3e94] (exynos_drm_platform_probe+0xfc/0x124)
 [1.804207] [c02f3e94] (exynos_drm_platform_probe) from [c0304a44] 
 (platform_drv_probe+0x58/0xb4)
 [1.813411] [c0304a44] (platform_drv_probe) from [c0302fa8] 
 (driver_probe_device+0x11c/0x23c)
 [1.822261] [c0302fa8] (driver_probe_device) from [c0303164] 
 (__driver_attach+0x9c/0xa0)
 [1.830679] [c0303164] (__driver_attach) from [c03014a0] 
 (bus_for_each_dev+0x64/0x98)
 [1.838838] [c03014a0] (bus_for_each_dev) from [c0302a4c] 
 (driver_attach+0x2c/0x30)
 [1.846824] [c0302a4c] (driver_attach) from [c030269c] 
 (bus_add_driver+0xe8/0x1e4)
 [1.854722] [c030269c] (bus_add_driver) from [c0303ad8] 
 (driver_register+0x88/0x104)
 [1.862794] [c0303ad8] (driver_register) from [c03048ac] 
 (__platform_driver_register+0x58/0x6c)
 [1.871827] [c03048ac] (__platform_driver_register) from [c02f3f84] 
 (exynos_drm_init+0xc8/0x124)
 [1.880936] [c02f3f84] (exynos_drm_init) from [c00089f4] 
 (do_one_initcall+0x90/0x1e0)
 [1.889096] [c00089f4] (do_one_initcall) from [c08b2e24] 
 (kernel_init_freeable+0x114/0x1e0)
 [1.897779] [c08b2e24] (kernel_init_freeable) from [c05235ac] 
 (kernel_init+0x18/0xfc)
 [1.905934] [c05235ac] (kernel_init) from [c000efa0] 
 (ret_from_fork+0x14/0x34)
 
 Hope that helps some, afraid I am not really familiar enough with
 the graphics stack to chase that down much more though.
 
 Thanks,
 Charles
 --
 To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 
 in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] drm/exynos: Check for NULL dereference of crtc

2015-03-06 Thread Charles Keepax
On Fri, Mar 06, 2015 at 10:13:42PM +0900, Inki Dae wrote:
> On 2015년 02월 18일 02:14, Charles Keepax wrote:
> > The commit "drm/exynos: remove exynos_plane_dpms" (d9ea6256) removed the
> > use of the enabled flag, which means that the code may attempt to call
> > win_enable on a NULL crtc. This results in the following oops on
> 
> Hmm... it's strange. plane->funcs->destroy() is called prior to
> crtc->funcs->destroy() so it should be exynos_crtc is not NULL. However,
> it seems there is any corner case we didn't catch up.
> 
> Applied.

Thanks, it seems the offending path in an error path, looks like
Arndale is missing some required DT setting which causes
exynos_drm_load to fail:

[1.638109] of_graph_get_next_endpoint(): no port node found in 
/dp-controller@145B
[1.646424] exynos-drm exynos-drm: bound 1440.fimd (ops 
fimd_component_ops)
[1.652704] /dp-controller@145B: could not find display-timings node
[1.659323] /dp-controller@145B: no timings specified
[1.664709] [drm:exynos_dp_bind] *ERROR* failed: of_get_videomode() : -22
[1.671485] exynos-drm exynos-drm: failed to bind 145b.dp-controller 
(ops exynos_dp_ops): -22

Which ends up calling exynos_plane_destroy as part of the clean up:

[1.698655] [] (unwind_backtrace) from [] 
(show_stack+0x20/0x24)
[1.706385] [] (show_stack) from [] 
(dump_stack+0x78/0xc4)
[1.713588] [] (dump_stack) from [] 
(exynos_disable_plane+0x2c/0x60)
[1.721660] [] (exynos_disable_plane) from [] 
(exynos_plane_destroy+0x1c/0x30)
[1.730605] [] (exynos_plane_destroy) from [] 
(drm_mode_config_cleanup+0x168/0x20c)
[1.739982] [] (drm_mode_config_cleanup) from [] 
(exynos_drm_load+0xac/0x12c)
[1.748832] [] (exynos_drm_load) from [] 
(drm_dev_register+0xb0/0x110)
[1.757075] [] (drm_dev_register) from [] 
(drm_platform_init+0x50/0xe0)
[1.765405] [] (drm_platform_init) from [] 
(exynos_drm_bind+0x20/0x28)
[1.773655] [] (exynos_drm_bind) from [] 
(try_to_bring_up_master.part.1+0xd8/0x114)
[1.783027] [] (try_to_bring_up_master.part.1) from [] 
(component_master_add_with_match+0xb4/0x134)
[1.793792] [] (component_master_add_with_match) from [] 
(exynos_drm_platform_probe+0xfc/0x124)
[1.804207] [] (exynos_drm_platform_probe) from [] 
(platform_drv_probe+0x58/0xb4)
[1.813411] [] (platform_drv_probe) from [] 
(driver_probe_device+0x11c/0x23c)
[1.822261] [] (driver_probe_device) from [] 
(__driver_attach+0x9c/0xa0)
[1.830679] [] (__driver_attach) from [] 
(bus_for_each_dev+0x64/0x98)
[1.838838] [] (bus_for_each_dev) from [] 
(driver_attach+0x2c/0x30)
[1.846824] [] (driver_attach) from [] 
(bus_add_driver+0xe8/0x1e4)
[1.854722] [] (bus_add_driver) from [] 
(driver_register+0x88/0x104)
[1.862794] [] (driver_register) from [] 
(__platform_driver_register+0x58/0x6c)
[1.871827] [] (__platform_driver_register) from [] 
(exynos_drm_init+0xc8/0x124)
[1.880936] [] (exynos_drm_init) from [] 
(do_one_initcall+0x90/0x1e0)
[1.889096] [] (do_one_initcall) from [] 
(kernel_init_freeable+0x114/0x1e0)
[1.897779] [] (kernel_init_freeable) from [] 
(kernel_init+0x18/0xfc)
[1.905934] [] (kernel_init) from [] 
(ret_from_fork+0x14/0x34)

Hope that helps some, afraid I am not really familiar enough with
the graphics stack to chase that down much more though.

Thanks,
Charles
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] drm/exynos: Check for NULL dereference of crtc

2015-03-06 Thread Inki Dae
On 2015년 02월 18일 02:14, Charles Keepax wrote:
> The commit "drm/exynos: remove exynos_plane_dpms" (d9ea6256) removed the
> use of the enabled flag, which means that the code may attempt to call
> win_enable on a NULL crtc. This results in the following oops on

Hmm... it's strange. plane->funcs->destroy() is called prior to
crtc->funcs->destroy() so it should be exynos_crtc is not NULL. However,
it seems there is any corner case we didn't catch up.

Applied.

Thanks,
Inki Dae

> Arndale:
> 
> [1.673479] Unable to handle kernel NULL pointer dereference at virtual 
> address 0368
> [1.681500] pgd = c0004000
> [1.684154] [0368] *pgd=
> [1.687713] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
> [1.693012] Modules linked in:
> [1.696045] CPU: 1 PID: 1 Comm: swapper/0 Not tainted
> 3.19.0-07545-g57485fa #1907
> [1.703524] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
> ()
> [2.014803] [] (exynos_plane_destroy) from [] 
> (drm_mode_config_cleanup+0x168/0x20c)
> [2.024178] [] (drm_mode_config_cleanup) from [] 
> (exynos_drm_load+0xac/0x12c)
> 
> This patch adds in a check to ensure exynos_crtc is not NULL before it
> is dereferenced.
> 
> Signed-off-by: Charles Keepax 
> ---
>  drivers/gpu/drm/exynos/exynos_drm_plane.c |2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c 
> b/drivers/gpu/drm/exynos/exynos_drm_plane.c
> index 2dfb847..78fc0a1 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
> @@ -176,7 +176,7 @@ static int exynos_disable_plane(struct drm_plane *plane)
>   struct exynos_drm_plane *exynos_plane = to_exynos_plane(plane);
>   struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(plane->crtc);
>  
> - if (exynos_crtc->ops->win_disable)
> + if (exynos_crtc && exynos_crtc->ops->win_disable)
>   exynos_crtc->ops->win_disable(exynos_crtc,
> exynos_plane->zpos);
>  
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] drm/exynos: Check for NULL dereference of crtc

2015-03-06 Thread Charles Keepax
On Fri, Mar 06, 2015 at 10:13:42PM +0900, Inki Dae wrote:
 On 2015년 02월 18일 02:14, Charles Keepax wrote:
  The commit drm/exynos: remove exynos_plane_dpms (d9ea6256) removed the
  use of the enabled flag, which means that the code may attempt to call
  win_enable on a NULL crtc. This results in the following oops on
 
 Hmm... it's strange. plane-funcs-destroy() is called prior to
 crtc-funcs-destroy() so it should be exynos_crtc is not NULL. However,
 it seems there is any corner case we didn't catch up.
 
 Applied.

Thanks, it seems the offending path in an error path, looks like
Arndale is missing some required DT setting which causes
exynos_drm_load to fail:

[1.638109] of_graph_get_next_endpoint(): no port node found in 
/dp-controller@145B
[1.646424] exynos-drm exynos-drm: bound 1440.fimd (ops 
fimd_component_ops)
[1.652704] /dp-controller@145B: could not find display-timings node
[1.659323] /dp-controller@145B: no timings specified
[1.664709] [drm:exynos_dp_bind] *ERROR* failed: of_get_videomode() : -22
[1.671485] exynos-drm exynos-drm: failed to bind 145b.dp-controller 
(ops exynos_dp_ops): -22

Which ends up calling exynos_plane_destroy as part of the clean up:

[1.698655] [c0015db4] (unwind_backtrace) from [c00121cc] 
(show_stack+0x20/0x24)
[1.706385] [c00121cc] (show_stack) from [c0528230] 
(dump_stack+0x78/0xc4)
[1.713588] [c0528230] (dump_stack) from [c02f72ec] 
(exynos_disable_plane+0x2c/0x60)
[1.721660] [c02f72ec] (exynos_disable_plane) from [c02f733c] 
(exynos_plane_destroy+0x1c/0x30)
[1.730605] [c02f733c] (exynos_plane_destroy) from [c02e37c4] 
(drm_mode_config_cleanup+0x168/0x20c)
[1.739982] [c02e37c4] (drm_mode_config_cleanup) from [c02f3d18] 
(exynos_drm_load+0xac/0x12c)
[1.748832] [c02f3d18] (exynos_drm_load) from [c02dc074] 
(drm_dev_register+0xb0/0x110)
[1.757075] [c02dc074] (drm_dev_register) from [c02ddc88] 
(drm_platform_init+0x50/0xe0)
[1.765405] [c02ddc88] (drm_platform_init) from [c02f3a08] 
(exynos_drm_bind+0x20/0x28)
[1.773655] [c02f3a08] (exynos_drm_bind) from [c02fe664] 
(try_to_bring_up_master.part.1+0xd8/0x114)
[1.783027] [c02fe664] (try_to_bring_up_master.part.1) from [c02fe754] 
(component_master_add_with_match+0xb4/0x134)
[1.793792] [c02fe754] (component_master_add_with_match) from [c02f3e94] 
(exynos_drm_platform_probe+0xfc/0x124)
[1.804207] [c02f3e94] (exynos_drm_platform_probe) from [c0304a44] 
(platform_drv_probe+0x58/0xb4)
[1.813411] [c0304a44] (platform_drv_probe) from [c0302fa8] 
(driver_probe_device+0x11c/0x23c)
[1.822261] [c0302fa8] (driver_probe_device) from [c0303164] 
(__driver_attach+0x9c/0xa0)
[1.830679] [c0303164] (__driver_attach) from [c03014a0] 
(bus_for_each_dev+0x64/0x98)
[1.838838] [c03014a0] (bus_for_each_dev) from [c0302a4c] 
(driver_attach+0x2c/0x30)
[1.846824] [c0302a4c] (driver_attach) from [c030269c] 
(bus_add_driver+0xe8/0x1e4)
[1.854722] [c030269c] (bus_add_driver) from [c0303ad8] 
(driver_register+0x88/0x104)
[1.862794] [c0303ad8] (driver_register) from [c03048ac] 
(__platform_driver_register+0x58/0x6c)
[1.871827] [c03048ac] (__platform_driver_register) from [c02f3f84] 
(exynos_drm_init+0xc8/0x124)
[1.880936] [c02f3f84] (exynos_drm_init) from [c00089f4] 
(do_one_initcall+0x90/0x1e0)
[1.889096] [c00089f4] (do_one_initcall) from [c08b2e24] 
(kernel_init_freeable+0x114/0x1e0)
[1.897779] [c08b2e24] (kernel_init_freeable) from [c05235ac] 
(kernel_init+0x18/0xfc)
[1.905934] [c05235ac] (kernel_init) from [c000efa0] 
(ret_from_fork+0x14/0x34)

Hope that helps some, afraid I am not really familiar enough with
the graphics stack to chase that down much more though.

Thanks,
Charles
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] drm/exynos: Check for NULL dereference of crtc

2015-03-06 Thread Inki Dae
On 2015년 02월 18일 02:14, Charles Keepax wrote:
 The commit drm/exynos: remove exynos_plane_dpms (d9ea6256) removed the
 use of the enabled flag, which means that the code may attempt to call
 win_enable on a NULL crtc. This results in the following oops on

Hmm... it's strange. plane-funcs-destroy() is called prior to
crtc-funcs-destroy() so it should be exynos_crtc is not NULL. However,
it seems there is any corner case we didn't catch up.

Applied.

Thanks,
Inki Dae

 Arndale:
 
 [1.673479] Unable to handle kernel NULL pointer dereference at virtual 
 address 0368
 [1.681500] pgd = c0004000
 [1.684154] [0368] *pgd=
 [1.687713] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
 [1.693012] Modules linked in:
 [1.696045] CPU: 1 PID: 1 Comm: swapper/0 Not tainted
 3.19.0-07545-g57485fa #1907
 [1.703524] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
 ()
 [2.014803] [c02f9cfc] (exynos_plane_destroy) from [c02e61b4] 
 (drm_mode_config_cleanup+0x168/0x20c)
 [2.024178] [c02e61b4] (drm_mode_config_cleanup) from [c02f66fc] 
 (exynos_drm_load+0xac/0x12c)
 
 This patch adds in a check to ensure exynos_crtc is not NULL before it
 is dereferenced.
 
 Signed-off-by: Charles Keepax ckee...@opensource.wolfsonmicro.com
 ---
  drivers/gpu/drm/exynos/exynos_drm_plane.c |2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c 
 b/drivers/gpu/drm/exynos/exynos_drm_plane.c
 index 2dfb847..78fc0a1 100644
 --- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
 +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
 @@ -176,7 +176,7 @@ static int exynos_disable_plane(struct drm_plane *plane)
   struct exynos_drm_plane *exynos_plane = to_exynos_plane(plane);
   struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(plane-crtc);
  
 - if (exynos_crtc-ops-win_disable)
 + if (exynos_crtc  exynos_crtc-ops-win_disable)
   exynos_crtc-ops-win_disable(exynos_crtc,
 exynos_plane-zpos);
  
 

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] drm/exynos: Check for NULL dereference of crtc

2015-02-17 Thread Charles Keepax
The commit "drm/exynos: remove exynos_plane_dpms" (d9ea6256) removed the
use of the enabled flag, which means that the code may attempt to call
win_enable on a NULL crtc. This results in the following oops on
Arndale:

[1.673479] Unable to handle kernel NULL pointer dereference at virtual 
address 0368
[1.681500] pgd = c0004000
[1.684154] [0368] *pgd=
[1.687713] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
[1.693012] Modules linked in:
[1.696045] CPU: 1 PID: 1 Comm: swapper/0 Not tainted
3.19.0-07545-g57485fa #1907
[1.703524] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
()
[2.014803] [] (exynos_plane_destroy) from [] 
(drm_mode_config_cleanup+0x168/0x20c)
[2.024178] [] (drm_mode_config_cleanup) from [] 
(exynos_drm_load+0xac/0x12c)

This patch adds in a check to ensure exynos_crtc is not NULL before it
is dereferenced.

Signed-off-by: Charles Keepax 
---
 drivers/gpu/drm/exynos/exynos_drm_plane.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c 
b/drivers/gpu/drm/exynos/exynos_drm_plane.c
index 2dfb847..78fc0a1 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
@@ -176,7 +176,7 @@ static int exynos_disable_plane(struct drm_plane *plane)
struct exynos_drm_plane *exynos_plane = to_exynos_plane(plane);
struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(plane->crtc);
 
-   if (exynos_crtc->ops->win_disable)
+   if (exynos_crtc && exynos_crtc->ops->win_disable)
exynos_crtc->ops->win_disable(exynos_crtc,
  exynos_plane->zpos);
 
-- 
1.7.2.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] drm/exynos: Check for NULL dereference of crtc

2015-02-17 Thread Charles Keepax
The commit drm/exynos: remove exynos_plane_dpms (d9ea6256) removed the
use of the enabled flag, which means that the code may attempt to call
win_enable on a NULL crtc. This results in the following oops on
Arndale:

[1.673479] Unable to handle kernel NULL pointer dereference at virtual 
address 0368
[1.681500] pgd = c0004000
[1.684154] [0368] *pgd=
[1.687713] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
[1.693012] Modules linked in:
[1.696045] CPU: 1 PID: 1 Comm: swapper/0 Not tainted
3.19.0-07545-g57485fa #1907
[1.703524] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
()
[2.014803] [c02f9cfc] (exynos_plane_destroy) from [c02e61b4] 
(drm_mode_config_cleanup+0x168/0x20c)
[2.024178] [c02e61b4] (drm_mode_config_cleanup) from [c02f66fc] 
(exynos_drm_load+0xac/0x12c)

This patch adds in a check to ensure exynos_crtc is not NULL before it
is dereferenced.

Signed-off-by: Charles Keepax ckee...@opensource.wolfsonmicro.com
---
 drivers/gpu/drm/exynos/exynos_drm_plane.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c 
b/drivers/gpu/drm/exynos/exynos_drm_plane.c
index 2dfb847..78fc0a1 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
@@ -176,7 +176,7 @@ static int exynos_disable_plane(struct drm_plane *plane)
struct exynos_drm_plane *exynos_plane = to_exynos_plane(plane);
struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(plane-crtc);
 
-   if (exynos_crtc-ops-win_disable)
+   if (exynos_crtc  exynos_crtc-ops-win_disable)
exynos_crtc-ops-win_disable(exynos_crtc,
  exynos_plane-zpos);
 
-- 
1.7.2.5

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/