diff options
author | Chen-Yu Tsai <wens@csie.org> | 2017-02-16 22:13:26 -0500 |
---|---|---|
committer | Maxime Ripard <maxime.ripard@free-electrons.com> | 2017-03-07 16:15:15 -0500 |
commit | 92b300c4e6f7f6fc22e1cc02d7c07627769a6339 (patch) | |
tree | ed7768931cfe0849098195ca14a819a2e35d91b6 | |
parent | 9d56defb44b15427f4342c543a70fb7886fc06f5 (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.c | 6 |
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); |