diff options
author | Nick Chung <nickchung@google.com> | 2021-09-15 17:30:36 +0800 |
---|---|---|
committer | Edmond Chung <edmondchung@google.com> | 2021-09-17 20:40:11 +0000 |
commit | ed027a30400602fdd6ca568bdaf4a116bbd61450 (patch) | |
tree | 4b029f796ed7ad1faaade260fa17741da4583bc8 | |
parent | e1d89e4f5f8da316b9ded5ac1383ef036f4b3510 (diff) | |
download | lwis-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.c | 4 |
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; |