From: Christian König <christian.koenig@xxxxxxx> The list of shared fences can be NULL and that needs to be handled as well. Signed-off-by: Christian König <christian.koenig at amd.com> --- drivers/dma-buf/reservation.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c index 302c137..dec3a81 100644 --- a/drivers/dma-buf/reservation.c +++ b/drivers/dma-buf/reservation.c @@ -279,23 +279,25 @@ int reservation_object_copy_fences(struct reservation_object *dst, src_list = reservation_object_get_list(src); - /* - * resize dst->fence or allocate if it doesn't exist, - * noop if already correct size - */ - size = offsetof(typeof(*src_list), shared[src_list->shared_count]); - dst_list = kmalloc(size, GFP_KERNEL); - if (!dst_list) - return -ENOMEM; + if (src_list) { + size = offsetof(typeof(*src_list), + shared[src_list->shared_count]); + dst_list = kmalloc(size, GFP_KERNEL); + if (!dst_list) + return -ENOMEM; + + dst_list->shared_count = src_list->shared_count; + dst_list->shared_max = src_list->shared_count; + for (i = 0; i < src_list->shared_count; ++i) + dst_list->shared[i] = + dma_fence_get(src_list->shared[i]); + } else { + dst_list = NULL; + } kfree(dst->staged); dst->staged = NULL; - dst_list->shared_count = src_list->shared_count; - dst_list->shared_max = src_list->shared_count; - for (i = 0; i < src_list->shared_count; ++i) - dst_list->shared[i] = dma_fence_get(src_list->shared[i]); - src_list = reservation_object_get_list(dst); old = reservation_object_get_excl(dst); -- 2.7.4