aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChen-Yu Tsai <wens@csie.org>2017-02-16 22:13:26 -0500
committerMaxime Ripard <maxime.ripard@free-electrons.com>2017-03-07 16:15:15 -0500
commit92b300c4e6f7f6fc22e1cc02d7c07627769a6339 (patch)
treeed7768931cfe0849098195ca14a819a2e35d91b6
parent9d56defb44b15427f4342c543a70fb7886fc06f5 (diff)
drm/sun4i: Check return value of drm_vblank_init
drm_vblank_init can fail due to insufficient memory. Ignoring the error and proceeding may cause the kernel to dereference an invalid pointer when vblank is enabled. Signed-off-by: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
-rw-r--r--drivers/gpu/drm/sun4i/sun4i_drv.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index 7ae179e88309..46887c3044d0 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -102,7 +102,11 @@ static int sun4i_drv_bind(struct device *dev)
102 } 102 }
103 drm->dev_private = drv; 103 drm->dev_private = drv;
104 104
105 drm_vblank_init(drm, 1); 105 /* drm_vblank_init calls kcalloc, which can fail */
106 ret = drm_vblank_init(drm, 1);
107 if (ret)
108 goto free_drm;
109
106 drm_mode_config_init(drm); 110 drm_mode_config_init(drm);
107 111
108 ret = component_bind_all(drm->dev, drm); 112 ret = component_bind_all(drm->dev, drm);