Guard against double free via checking mCodeMemMgr.get() first.
Change-Id: Id6cc8b3e269c94891c097317274b33b6d200828c
diff --git a/bcc.cpp b/bcc.cpp
index 42c8def..ac41041 100644
--- a/bcc.cpp
+++ b/bcc.cpp
@@ -3349,12 +3349,21 @@
}
~Compiler() {
- if (mCodeDataAddr != 0 && mCodeDataAddr != MAP_FAILED) {
- if (munmap(mCodeDataAddr, MaxCodeSize + MaxGlobalVarSize) < 0) {
- LOGE("munmap failed while releasing mCodeDataAddr\n");
+ if (!mCodeMemMgr.get()) {
+ // mCodeDataAddr and mCacheMapAddr are from loader and not
+ // managed by CodeMemoryManager.
+
+ if (mCodeDataAddr != 0 && mCodeDataAddr != MAP_FAILED) {
+ if (munmap(mCodeDataAddr, MaxCodeSize + MaxGlobalVarSize) < 0) {
+ LOGE("munmap failed while releasing mCodeDataAddr\n");
+ }
+
+ mCodeDataAddr = 0;
}
+
if (mCacheMapAddr) {
free(mCacheMapAddr);
+ mCacheMapAddr = 0;
}
}