summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Chung <nickchung@google.com>2021-09-15 17:30:36 +0800
committerEdmond Chung <edmondchung@google.com>2021-09-17 20:40:11 +0000
commited027a30400602fdd6ca568bdaf4a116bbd61450 (patch)
tree4b029f796ed7ad1faaade260fa17741da4583bc8
parente1d89e4f5f8da316b9ded5ac1383ef036f4b3510 (diff)
downloadlwis-android-gs-raviole-5.10-android12-d1.tar.gz
Buffer: Correctly disenroll buffer to avoid memory leaksandroid-12.0.0_r0.17android-12.0.0_r0.16android-gs-raviole-5.10-android12-d1
After pa/1974512 is in, one buffer can be enrolled several times buffer is identified by vaddr. So when buffer->enrollment_list->list is empty, we should delete the hashmap node because there is no buffer enrollment anymore. Otherwise, if it's not empty, we need to keep the buffer node. The real buffer leakage is we didn't free the enrollment_list has been allocated. Add kfree(buffer->enrollment_list) into buffer disenrollment to fix memory leakage. Bug: 199806521 Test: kmemleak_analyze.py, CTS, GCA Signed-off-by: Nick Chung <nickchung@google.com> Change-Id: Id5904cff1f7f6d6392ff203e144479be7df1c73f (cherry picked from commit ab45d0cda10ab5aa70616b96b0db26295ab606ad)
-rw-r--r--lwis_buffer.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lwis_buffer.c b/lwis_buffer.c
index 370b079..77f1754 100644
--- a/lwis_buffer.c
+++ b/lwis_buffer.c
@@ -247,8 +247,9 @@ int lwis_buffer_disenroll(struct lwis_client *lwis_client, struct lwis_enrolled_
dma_buf_put(buffer->dma_buf);
/* Delete the node from the hash table */
list_del(&buffer->list_node);
- if (!list_empty(&buffer->enrollment_list->list)) {
+ if (list_empty(&buffer->enrollment_list->list)) {
hash_del(&buffer->enrollment_list->node);
+ kfree(buffer->enrollment_list);
}
return 0;
}
@@ -305,7 +306,6 @@ int lwis_client_enrolled_buffers_clear(struct lwis_client *lwis_client)
/* Free the object */
kfree(buffer);
}
- kfree(enrollment_list);
}
return 0;