If we don't have enough memory for ->planes then we leak "fb".

Signed-off-by: Dan Carpenter <dan.carpenter at oracle.com>

diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c
index 490f771..1362d78 100644
--- a/drivers/gpu/drm/tegra/fb.c
+++ b/drivers/gpu/drm/tegra/fb.c
@@ -98,8 +98,10 @@ static struct tegra_fb *tegra_fb_alloc(struct drm_device 
*drm,
                return ERR_PTR(-ENOMEM);

        fb->planes = kzalloc(num_planes * sizeof(*planes), GFP_KERNEL);
-       if (!fb->planes)
-               return ERR_PTR(-ENOMEM);
+       if (!fb->planes) {
+               err = -ENOMEM;
+               goto free_fb;
+       }

        fb->num_planes = num_planes;

@@ -112,12 +114,17 @@ static struct tegra_fb *tegra_fb_alloc(struct drm_device 
*drm,
        if (err < 0) {
                dev_err(drm->dev, "failed to initialize framebuffer: %d\n",
                        err);
-               kfree(fb->planes);
-               kfree(fb);
-               return ERR_PTR(err);
+               goto free_planes;
        }

        return fb;
+
+free_planes:
+       kfree(fb->planes);
+free_fb:
+       kfree(fb);
+
+       return ERR_PTR(err);
 }

 static struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,

Reply via email to