[PATCH] dma-buf: handle NULL src_list in reservation_object_copy_fences

Christian König deathsimple at vodafone.de
Thu Aug 10 13:41:35 UTC 2017


From: Christian König <christian.koenig at amd.com>

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



More information about the dri-devel mailing list