Skip to content

Commit 4cd54d9

Browse files
sudipm-mukherjeepatjak
authored andcommitted
drm/gma500: fix double freeing
We are allocating backing using psbfb_alloc() and so backing->stolen is always true. So we were freeing backing two times. Moreover if we follow the execution path then we should be freeing backing after we have released the helper. So remove the one which frees backing before the helper is released. While at it the error labels are also renamed to give a meaningful name. [Patrik: Fixed conflict with removal of struct_mutex] Signed-off-by: Sudip Mukherjee <[email protected]> Reviewed-by: Patrik Jakobsson <[email protected]> Signed-off-by: Patrik Jakobsson <[email protected]>
1 parent d00b39c commit 4cd54d9

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

drivers/gpu/drm/gma500/framebuffer.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -411,15 +411,15 @@ static int psbfb_create(struct psb_fbdev *fbdev,
411411
info = drm_fb_helper_alloc_fbi(&fbdev->psb_fb_helper);
412412
if (IS_ERR(info)) {
413413
ret = PTR_ERR(info);
414-
goto out_err1;
414+
goto err_free_range;
415415
}
416416
info->par = fbdev;
417417

418418
mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth);
419419

420420
ret = psb_framebuffer_init(dev, psbfb, &mode_cmd, backing);
421421
if (ret)
422-
goto out_unref;
422+
goto err_release;
423423

424424
fb = &psbfb->base;
425425
psbfb->fbdev = info;
@@ -464,14 +464,9 @@ static int psbfb_create(struct psb_fbdev *fbdev,
464464
psbfb->base.width, psbfb->base.height);
465465

466466
return 0;
467-
out_unref:
468-
if (backing->stolen)
469-
psb_gtt_free_range(dev, backing);
470-
else
471-
drm_gem_object_unreference_unlocked(&backing->gem);
472-
467+
err_release:
473468
drm_fb_helper_release_fbi(&fbdev->psb_fb_helper);
474-
out_err1:
469+
err_free_range:
475470
psb_gtt_free_range(dev, backing);
476471
return ret;
477472
}

0 commit comments

Comments
 (0)