From 084df2dcb7607c947d061056a66eef55f308512c Mon Sep 17 00:00:00 2001 From: Sri Krishna chowdary Date: Tue, 12 Jan 2016 15:54:08 +0530 Subject: [media] v4l: vb2-dma-contig: fix vb2_get_vma() nvmap expects that same VMA is opened and closed to disallow memory leaks. So, nvmap panics if a previously non-existent vma is being closed through it. Hence modify the sequence in vb2_get_vma() to open the vma_copy before returning it. This way nvmap sees that the vma_copy exists in its list and will close the vma. Bug 200164002 Change-Id: I45dfb8ca710375a0e70d9802ebdcc9fd4d0b4600 Signed-off-by: Sri Krishna chowdary Reviewed-on: http://git-master/r/931997 (cherry picked from commit bf1d15d8a879a599f9801310cecbbb61ea60e931) Reviewed-on: http://git-master/r/1133707 Tested-by: Bryan Wu Reviewed-by: Bryan Wu Reviewed-by: Krishna Reddy Reviewed-by: Matthew Pedro --- drivers/media/v4l2-core/videobuf2-memops.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'drivers/media') diff --git a/drivers/media/v4l2-core/videobuf2-memops.c b/drivers/media/v4l2-core/videobuf2-memops.c index 81c1ad8b2cf1..a8099ba5a62c 100644 --- a/drivers/media/v4l2-core/videobuf2-memops.c +++ b/drivers/media/v4l2-core/videobuf2-memops.c @@ -49,6 +49,12 @@ struct vm_area_struct *vb2_get_vma(struct vm_area_struct *vma) memcpy(vma_copy, vma, sizeof(*vma)); + if (vma_copy->vm_ops && vma_copy->vm_ops->open) + vma_copy->vm_ops->open(vma_copy); + + if (vma->vm_ops && vma->vm_ops->close) + vma->vm_ops->close(vma); + vma_copy->vm_mm = NULL; vma_copy->vm_next = NULL; vma_copy->vm_prev = NULL; -- cgit v1.2.3