diff options
author | 2017-09-19 17:33:48 -0700 | |
---|---|---|
committer | 2017-10-09 18:06:34 -0700 | |
commit | 8196d2cce90dfcafa3fe06534e2b6768a3cd034e (patch) | |
tree | 0a1c5c80d8f5800f3112254c7a89634fb1d16f47 | |
parent | 71f6de410f183d27485775172cb00f9c9f59951c (diff) |
Fix "use of memory after freed" warning.
Static analyzer gets confused in the code to free a linked list.
To avoid confusion add an "assert" to tell the analyzer there is no
alias between the memory being deleted and accessed.
Bug: b/27101951
Test: Warning is gone.
Change-Id: Ia6661ee76908c2025b5e1a764d25ba3e11bf44c8
-rw-r--r-- | libs/binder/MemoryDealer.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/libs/binder/MemoryDealer.cpp b/libs/binder/MemoryDealer.cpp index 2a15773aa3..1cfe02a3fe 100644 --- a/libs/binder/MemoryDealer.cpp +++ b/libs/binder/MemoryDealer.cpp @@ -289,7 +289,15 @@ SimpleBestFitAllocator::SimpleBestFitAllocator(size_t size) SimpleBestFitAllocator::~SimpleBestFitAllocator() { while(!mList.isEmpty()) { - delete mList.remove(mList.head()); + chunk_t* removed = mList.remove(mList.head()); +#ifdef __clang_analyzer__ + // Clang static analyzer gets confused in this loop + // and generates a false positive warning about accessing + // memory that is already freed. + // Add an "assert" to avoid the confusion. + LOG_ALWAYS_FATAL_IF(mList.head() == removed); +#endif + delete removed; } } |