On Wed, Aug 10, 2022 at 12:26 PM Christian König <
ckoenig.leichtzumer...@gmail.com> wrote:

> Previously when we added a fence to a dma_resv object we always
> assumed the the newer than all the existing fences.
>
> With Jason's work to add an UAPI to explicit export/import that's not
> necessary the case any more. So without this check we would allow
> userspace to force the kernel into an use after free error.
>
> Since the change is very small and defensive it's probably a good
> idea to backport this to stable kernels as well just in case others
> are using the dma_resv object in the same way.
>

Especially in the new world of dma_resv being a "bag of fences", I think
this makes a lot of sense.

Reviewed-by: Jason Ekstrand <jason.ekstr...@collabora.com>


>
> Signed-off-by: Christian König <christian.koe...@amd.com>
> ---
>  drivers/dma-buf/dma-resv.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c
> index 205acb2c744d..e3885c90a3ac 100644
> --- a/drivers/dma-buf/dma-resv.c
> +++ b/drivers/dma-buf/dma-resv.c
> @@ -295,7 +295,8 @@ void dma_resv_add_fence(struct dma_resv *obj, struct
> dma_fence *fence,
>                 enum dma_resv_usage old_usage;
>
>                 dma_resv_list_entry(fobj, i, obj, &old, &old_usage);
> -               if ((old->context == fence->context && old_usage >= usage)
> ||
> +               if ((old->context == fence->context && old_usage >= usage
> &&
> +                    dma_fence_is_later(fence, old)) ||
>                     dma_fence_is_signaled(old)) {
>                         dma_resv_list_set(fobj, i, fence, usage);
>                         dma_fence_put(old);
> --
> 2.25.1
>
>

Reply via email to