linux/drivers/gpu/drm/sun4i
Ondrej Jirman 1a07a94b47
drm/sun4i: tcon top: Fix NULL/invalid pointer dereference in sun8i_tcon_top_un/bind
There are two problems here:

1. Not all clk_data->hws[] need to be initialized, depending on various
   configured quirks. This leads to NULL ptr deref in
   clk_hw_unregister_gate() in sun8i_tcon_top_unbind()
2. If there is error when registering the clk_data->hws[],
   err_unregister_gates error path will try to unregister
   IS_ERR()=true (invalid) pointer.

For problem (1) I have this stack trace:

Unable to handle kernel NULL pointer dereference at virtual
  address 0000000000000008
Call trace:
 clk_hw_unregister+0x8/0x18
 clk_hw_unregister_gate+0x14/0x28
 sun8i_tcon_top_unbind+0x2c/0x60
 component_unbind.isra.4+0x2c/0x50
 component_bind_all+0x1d4/0x230
 sun4i_drv_bind+0xc4/0x1a0
 try_to_bring_up_master+0x164/0x1c0
 __component_add+0xa0/0x168
 component_add+0x10/0x18
 sun8i_dw_hdmi_probe+0x18/0x20
 platform_drv_probe+0x3c/0x70
 really_probe+0xcc/0x278
 driver_probe_device+0x34/0xa8

Problem (2) was identified by head scratching.

Signed-off-by: Ondrej Jirman <megous@megous.com>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190405233048.3823-1-megous@megous.com
2019-04-08 10:30:23 +02:00
..
Kconfig phy: Move Allwinner A31 D-PHY driver to drivers/phy/ 2019-02-07 09:34:49 +01:00
Makefile phy: Move Allwinner A31 D-PHY driver to drivers/phy/ 2019-02-07 09:34:49 +01:00
sun4i_backend.c Linux 5.0-rc7 2019-02-18 13:27:15 +10:00
sun4i_backend.h drm/sun4i: Pass modifier to backend and frontend format support helpers 2018-11-27 10:12:56 +01:00
sun4i_crtc.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
sun4i_crtc.h drm/sun4i: abstract a engine type 2017-06-01 09:47:23 +02:00
sun4i_dotclock.c drm/sun4i: Fix an ulong overflow in the dotclock driver 2018-10-19 11:50:25 +02:00
sun4i_dotclock.h
sun4i_drv.c drm/sun4i: Add support for A23 display pipeline 2019-01-25 10:42:07 +01:00
sun4i_drv.h drm/sun4i: Add a driver for the display frontend 2018-01-22 15:15:38 +01:00
sun4i_framebuffer.c drm/sun4i: Use drm_fbdev_generic_setup() 2018-11-01 15:25:11 +01:00
sun4i_framebuffer.h drm/sun4i: Use drm_fbdev_generic_setup() 2018-11-01 15:25:11 +01:00
sun4i_frontend.c drm/sun4i: Add support for A23 display pipeline 2019-01-25 10:42:07 +01:00
sun4i_frontend.h drm/sun4i: frontend: Move the FIR filter phases to our quirks 2019-01-18 21:12:26 +01:00
sun4i_hdmi_ddc_clk.c drm/sun4i: tcon: Don't rely on encoders to set the TCON mode 2017-10-17 19:49:13 +02:00
sun4i_hdmi_enc.c Linux 5.0-rc7 2019-02-18 13:27:15 +10:00
sun4i_hdmi_i2c.c drm/sun4i: hdmi: Add support for controller hardware variants 2017-10-11 09:53:33 +02:00
sun4i_hdmi_tmds_clk.c drm/sun4i: hdmi: Fix double flag assignation 2018-10-29 14:19:51 +01:00
sun4i_hdmi.h drm/sun4i: hdmi: Document PAD_CTRL1 output invert bits 2017-10-16 09:54:21 +02:00
sun4i_layer.c drm/sun4i: layer: support just backend formats when frontend is unavailable 2019-01-25 10:41:58 +01:00
sun4i_layer.h drm/sun4i: backend: Assign the pipes automatically 2018-02-22 16:19:52 +01:00
sun4i_lvds.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
sun4i_lvds.h drm/sun4i: Add LVDS support 2018-01-04 20:37:17 +01:00
sun4i_rgb.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
sun4i_rgb.h drm/sun4i: rgb: Pass tcon pointer when initializing RGB encoder 2017-03-07 22:18:24 +01:00
sun4i_tcon.c Linux 5.0-rc7 2019-02-18 13:27:15 +10:00
sun4i_tcon.h drm/sun4i: tcon: Support an active-low DE signal with RGB interface 2018-11-09 08:31:28 +01:00
sun4i_tv.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
sun6i_drc.c drm/sun4i: Add support for A23 display pipeline 2019-01-25 10:42:07 +01:00
sun6i_mipi_dsi.c drm/sun4i: dsi: Fix unitialized variable warning 2019-02-08 10:28:11 +01:00
sun6i_mipi_dsi.h sun6i: dsi: Convert to generic phy handling 2019-02-07 09:34:32 +01:00
sun8i_csc.c drm/sun4i: Add basic support for DE3 2018-11-05 11:48:23 +01:00
sun8i_csc.h drm/sun4i: Add DE2 CSC library 2017-12-05 13:22:44 +01:00
sun8i_dw_hdmi.c drm/sun4i: DW HDMI: Lower max. supported rate for H6 2019-04-05 10:44:10 +02:00
sun8i_dw_hdmi.h drm/sun4i: Add support for Synopsys HDMI PHY 2018-11-05 11:49:05 +01:00
sun8i_hdmi_phy_clk.c drm/sun4i: Add support for second clock parent to DW HDMI PHY clk driver 2018-06-27 21:44:02 +02:00
sun8i_hdmi_phy.c drm/sun4i: Add support for H6 HDMI PHY 2018-11-05 11:49:05 +01:00
sun8i_mixer.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
sun8i_mixer.h drm/sun4i: Add basic support for DE3 2018-11-05 11:48:23 +01:00
sun8i_tcon_top.c drm/sun4i: tcon top: Fix NULL/invalid pointer dereference in sun8i_tcon_top_un/bind 2019-04-08 10:30:23 +02:00
sun8i_tcon_top.h drm/sun4i: tcon-top: Add helpers for mux switching 2018-07-11 09:54:54 +02:00
sun8i_ui_layer.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
sun8i_ui_layer.h drm/sun4i: Rework DE2 register defines 2018-11-05 10:34:43 +01:00
sun8i_ui_scaler.c drm/sun4i: Add basic support for DE3 2018-11-05 11:48:23 +01:00
sun8i_ui_scaler.h drm/sun4i: Add basic support for DE3 2018-11-05 11:48:23 +01:00
sun8i_vi_layer.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
sun8i_vi_layer.h drm/sun4i: Add basic support for DE3 2018-11-05 11:48:23 +01:00
sun8i_vi_scaler.c drm/sun4i: Add basic support for DE3 2018-11-05 11:48:23 +01:00
sun8i_vi_scaler.h drm/sun4i: Add basic support for DE3 2018-11-05 11:48:23 +01:00
sunxi_engine.h drm/sun4i: Fix build warnings in sunxi_engine.h 2018-01-23 10:45:01 +01:00