Commit 925e4940 authored by Tomi Valkeinen's avatar Tomi Valkeinen

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: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent c7c1aecd
...@@ -380,7 +380,7 @@ struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev, ...@@ -380,7 +380,7 @@ struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev,
struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos) struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos)
{ {
struct omap_framebuffer *omap_fb; struct omap_framebuffer *omap_fb = NULL;
struct drm_framebuffer *fb = NULL; struct drm_framebuffer *fb = NULL;
const struct format *format = NULL; const struct format *format = NULL;
int ret, i, n = drm_format_num_planes(mode_cmd->pixel_format); 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,8 +451,7 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
return fb; return fb;
fail: fail:
if (fb) kfree(omap_fb);
omap_framebuffer_destroy(fb);
return ERR_PTR(ret); return ERR_PTR(ret);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment