Messages in this thread |  | | Subject | Re: [PATCH] drm/ttm: Fix dma_fence refcnt leak in ttm_bo_vm_fault_reserved | From | Christian König <> | Date | Sat, 13 Jun 2020 17:08:58 +0200 |
| |
Am 13.06.20 um 14:28 schrieb Xiyu Yang: > ttm_bo_vm_fault_reserved() invokes dma_fence_get(), which returns a > reference of the specified dma_fence object to "moving" with increased > refcnt. > > When ttm_bo_vm_fault_reserved() returns, local variable "moving" becomes > invalid, so the refcount should be decreased to keep refcount balanced. > > The reference counting issue happens in several exception handling paths > of ttm_bo_vm_fault_reserved(). When those error scenarios occur such as > "err" equals to -EBUSY, the function forgets to decrease the refcnt > increased by dma_fence_get(), causing a refcnt leak. > > Fix this issue by calling dma_fence_put() when no_wait_gpu flag is > equals to true. > > Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn> > Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
Good catch, Reviewed-by: Christian König <christian.koenig@amd.com>.
Going to pick that up for drm-misc-fixes.
Christian.
> --- > drivers/gpu/drm/ttm/ttm_bo_vm.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c > index a43aa7275f12..fa03fab02076 100644 > --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c > +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c > @@ -300,8 +300,10 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf, > break; > case -EBUSY: > case -ERESTARTSYS: > + dma_fence_put(moving); > return VM_FAULT_NOPAGE; > default: > + dma_fence_put(moving); > return VM_FAULT_SIGBUS; > } >
|  |