diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-09-25 15:24:27 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2015-03-24 07:50:54 -0400 |
commit | 925e4940489a792b4aaf601c22c1943fbd9fd558 (patch) | |
tree | 0ab13e08156788dccdb25d80c9921045d57a40d2 /drivers/gpu/drm/omapdrm/omap_fb.c | |
parent | c7c1aecd8e490c3818eaaea33e3c0d372931350a (diff) |
drm/omap: fix error handling in omap_framebuffer_create()
When an error happens in omap_framebuffer_create(),
omap_framebuffer_create() calls omap_framebuffer_destroy() if the fb
struct has been allocated. However, that crashes, as
omap_framebuffer_destroy(), which calls drm_framebuffer_cleanup(),
should only be called after drm_framebuffer_init()
Fix this by just calling kfree() for the allocated fb when an error
happens.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_fb.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_fb.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/drm/omapdrm/omap_fb.c index d1e5f6da30d4..3c6488e89788 100644 --- a/drivers/gpu/drm/omapdrm/omap_fb.c +++ b/drivers/gpu/drm/omapdrm/omap_fb.c | |||
@@ -380,7 +380,7 @@ struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev, | |||
380 | struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev, | 380 | struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev, |
381 | struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos) | 381 | struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos) |
382 | { | 382 | { |
383 | struct omap_framebuffer *omap_fb; | 383 | struct omap_framebuffer *omap_fb = NULL; |
384 | struct drm_framebuffer *fb = NULL; | 384 | struct drm_framebuffer *fb = NULL; |
385 | const struct format *format = NULL; | 385 | const struct format *format = NULL; |
386 | int ret, i, n = drm_format_num_planes(mode_cmd->pixel_format); | 386 | int ret, i, n = drm_format_num_planes(mode_cmd->pixel_format); |
@@ -451,8 +451,7 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev, | |||
451 | return fb; | 451 | return fb; |
452 | 452 | ||
453 | fail: | 453 | fail: |
454 | if (fb) | 454 | kfree(omap_fb); |
455 | omap_framebuffer_destroy(fb); | ||
456 | 455 | ||
457 | return ERR_PTR(ret); | 456 | return ERR_PTR(ret); |
458 | } | 457 | } |