diff --git a/drivers/staging/android/ion/ion_system_secure_heap.c b/drivers/staging/android/ion/ion_system_secure_heap.c index ab681c9418a2..62974c79fe63 100644 --- a/drivers/staging/android/ion/ion_system_secure_heap.c +++ b/drivers/staging/android/ion/ion_system_secure_heap.c @@ -52,9 +52,12 @@ static int get_secure_vmid(unsigned long flags) static void ion_system_secure_heap_free(struct ion_buffer *buffer) { int ret = 0; + int i; u32 source_vm; int dest_vmid; int dest_perms; + struct sg_table *sgt; + struct scatterlist *sg; struct ion_heap *heap = buffer->heap; struct ion_system_secure_heap *secure_heap = container_of(heap, struct ion_system_secure_heap, @@ -76,6 +79,10 @@ static void ion_system_secure_heap_free(struct ion_buffer *buffer) return; } + sgt = buffer->priv_virt; + for_each_sg(sgt->sgl, sg, sgt->nents, i) + ClearPagePrivate(sg_page(sg)); + buffer->heap = secure_heap->sys_heap; secure_heap->sys_heap->ops->free(buffer); } @@ -86,9 +93,12 @@ static int ion_system_secure_heap_allocate(struct ion_heap *heap, unsigned long flags) { int ret = 0; + int i; u32 source_vm; int dest_vmid; int dest_perms; + struct sg_table *sgt; + struct scatterlist *sg; struct ion_system_secure_heap *secure_heap = container_of(heap, struct ion_system_secure_heap, heap); @@ -123,6 +133,11 @@ static int ion_system_secure_heap_allocate(struct ion_heap *heap, pr_err("%s: Assign call failed\n", __func__); goto err; } + + sgt = buffer->priv_virt; + for_each_sg(sgt->sgl, sg, sgt->nents, i) + SetPagePrivate(sg_page(sg)); + return ret; err: