drm/syncobj: fix leaking dma_fence in drm_syncobj_query_ioctl
We need to check the context number instead if the previous sequence to detect
an error and if an error is detected we need to drop the reference to the
current fence or otherwise would leak it.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 27b575a9aa
("drm/syncobj: add timeline payload query ioctl v6")
Link: https://patchwork.freedesktop.org/patch/319123/
This commit is contained in:
parent
4de09ffcf4
commit
b33b556ce5
|
@ -1298,14 +1298,14 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
|
|||
struct dma_fence *iter, *last_signaled = NULL;
|
||||
|
||||
dma_fence_chain_for_each(iter, fence) {
|
||||
if (!iter)
|
||||
break;
|
||||
dma_fence_put(last_signaled);
|
||||
last_signaled = dma_fence_get(iter);
|
||||
if (!to_dma_fence_chain(last_signaled)->prev_seqno)
|
||||
if (iter->context != fence->context) {
|
||||
dma_fence_put(iter);
|
||||
/* It is most likely that timeline has
|
||||
* unorder points. */
|
||||
break;
|
||||
}
|
||||
dma_fence_put(last_signaled);
|
||||
last_signaled = dma_fence_get(iter);
|
||||
}
|
||||
point = dma_fence_is_signaled(last_signaled) ?
|
||||
last_signaled->seqno :
|
||||
|
|
Loading…
Reference in New Issue