]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/i915: avoid deadlock on failure paths in __intel_framebuffer_create()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Fri, 7 Nov 2014 22:41:23 +0000 (01:41 +0300)
committerLuis Henriques <luis.henriques@canonical.com>
Tue, 2 Feb 2016 19:10:08 +0000 (19:10 +0000)
commit 6ccb81f2171ab48592946efab0ce0fd41978f4ba upstream.

Since a8bb6818270c __intel_framebuffer_create() is called
with struct_mutex held, so it should use drm_gem_object_unreference()
instead of drm_gem_object_unreference_unlocked().

Found by Linux Driver Verification project (linuxtesting.org).

This regression has been introduced in

commit a8bb6818270c32126dba0fd2ddb139d885c5687d
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Mon Feb 10 18:00:39 2014 +0100

    drm/i915: Fix error path leak in fbdev fb allocation

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
drivers/gpu/drm/i915/intel_display.c

index b019c563a787c638d5bf7cd7a69462da8a371de5..0d68c70368ff54d9f17075b6280b6247a5895d75 100644 (file)
@@ -8220,7 +8220,7 @@ __intel_framebuffer_create(struct drm_device *dev,
 
        intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
        if (!intel_fb) {
-               drm_gem_object_unreference_unlocked(&obj->base);
+               drm_gem_object_unreference(&obj->base);
                return ERR_PTR(-ENOMEM);
        }
 
@@ -8230,7 +8230,7 @@ __intel_framebuffer_create(struct drm_device *dev,
 
        return &intel_fb->base;
 err:
-       drm_gem_object_unreference_unlocked(&obj->base);
+       drm_gem_object_unreference(&obj->base);
        kfree(intel_fb);
 
        return ERR_PTR(ret);