Patch "drm/i915/selftests: Fix i915_address_space refcnt leak" has been added to the 5.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm/i915/selftests: Fix i915_address_space refcnt leak

to the 5.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-i915-selftests-fix-i915_address_space-refcnt-lea.patch
and it can be found in the queue-5.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit a3f9504e103d40f41c69549c4e286af8fef25254
Author: Xiyu Yang <xiyuyang19@xxxxxxxxxxxx>
Date:   Mon Apr 20 13:41:54 2020 +0800

    drm/i915/selftests: Fix i915_address_space refcnt leak
    
    commit 5d5e100a20348c336e56df604b353b978f8adbb9 upstream.
    
    igt_ppgtt_pin_update() invokes i915_gem_context_get_vm_rcu(), which
    returns a reference of the i915_address_space object to "vm" with
    increased refcount.
    
    When igt_ppgtt_pin_update() returns, "vm" becomes invalid, so the
    refcount should be decreased to keep refcount balanced.
    
    The reference counting issue happens in two exception handling paths of
    igt_ppgtt_pin_update(). When i915_gem_object_create_internal() returns
    IS_ERR, the refcnt increased by i915_gem_context_get_vm_rcu() is not
    decreased, causing a refcnt leak.
    
    Fix this issue by jumping to "out_vm" label when
    i915_gem_object_create_internal() returns IS_ERR.
    
    Fixes: a4e7ccdac38e ("drm/i915: Move context management under GEM")
    Signed-off-by: Xiyu Yang <xiyuyang19@xxxxxxxxxxxx>
    Signed-off-by: Xin Tan <tanxin.ctf@xxxxxxxxx>
    Reviewed-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
    Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
    Link: https://patchwork.freedesktop.org/patch/msgid/1587361342-83494-1-git-send-email-xiyuyang19@xxxxxxxxxxxx
    (cherry picked from commit e07c7606a00c4361bad72ff4e72ed0dfbefa23b0)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
index 9311250d7d6f9..7a7763be6b2e3 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
@@ -1578,8 +1578,10 @@ static int igt_ppgtt_pin_update(void *arg)
 		unsigned int page_size = BIT(first);
 
 		obj = i915_gem_object_create_internal(dev_priv, page_size);
-		if (IS_ERR(obj))
-			return PTR_ERR(obj);
+		if (IS_ERR(obj)) {
+			err = PTR_ERR(obj);
+			goto out_vm;
+		}
 
 		vma = i915_vma_instance(obj, vm, NULL);
 		if (IS_ERR(vma)) {
@@ -1632,8 +1634,10 @@ static int igt_ppgtt_pin_update(void *arg)
 	}
 
 	obj = i915_gem_object_create_internal(dev_priv, PAGE_SIZE);
-	if (IS_ERR(obj))
-		return PTR_ERR(obj);
+	if (IS_ERR(obj)) {
+		err = PTR_ERR(obj);
+		goto out_vm;
+	}
 
 	vma = i915_vma_instance(obj, vm, NULL);
 	if (IS_ERR(vma)) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux