[Tizen] Enable ASan annotation of passing to native code buffers
[platform/upstream/coreclr.git] / src / pal / src / memory / local.cpp
index 3a0f40f..44d9feb 100644 (file)
@@ -26,6 +26,14 @@ Revision History:
 
 SET_DEFAULT_DEBUG_CHANNEL(MEM);
 
+#ifdef TIZEN_ASAN_ENVIRONMENT
+extern "C" {
+extern void __sanitizer_disable_interceptors() __attribute__ ((weak));
+extern void __sanitizer_enable_interceptors() __attribute__ ((weak));
+extern bool __sanitizer_interceptors_are_enabled() __attribute__ ((weak));
+}
+#endif
+
 static
 int
 AllocFlagsToHeapAllocFlags (IN  UINT  AllocFlags,
@@ -70,7 +78,24 @@ LocalAlloc(
         goto done;
     }
 
-    lpRetVal = HeapAlloc( GetProcessHeap(), uFlags, uBytes );
+#ifdef TIZEN_ASAN_ENVIRONMENT
+    if (__sanitizer_interceptors_are_enabled != NULL)
+    {
+        bool san_enabled;
+        san_enabled = __sanitizer_interceptors_are_enabled();
+        if (!san_enabled) {
+            __sanitizer_enable_interceptors();
+        }
+        lpRetVal = HeapAlloc( GetProcessHeap(), uFlags, uBytes );
+        if (!san_enabled) {
+            __sanitizer_disable_interceptors();
+        }
+    }
+    else
+#endif
+    {
+        lpRetVal = HeapAlloc( GetProcessHeap(), uFlags, uBytes );
+    }
 
 done:
     LOGEXIT( "LocalAlloc returning %p.\n", lpRetVal );
@@ -128,7 +153,25 @@ LocalFree(
 
     if ( hMem )
     {
-        bRetVal = HeapFree( GetProcessHeap(), 0, hMem );
+#ifdef TIZEN_ASAN_ENVIRONMENT
+        if (__sanitizer_interceptors_are_enabled != NULL)
+        {
+            bool san_enabled;
+            san_enabled = __sanitizer_interceptors_are_enabled();
+            if (!san_enabled) {
+                __sanitizer_enable_interceptors();
+            }
+            bRetVal = HeapFree( GetProcessHeap(), 0, hMem );
+            if (!san_enabled) {
+                __sanitizer_disable_interceptors();
+            }
+        }
+        else
+#endif
+        {
+            bRetVal = HeapFree( GetProcessHeap(), 0, hMem );
+        }
+
     }
     else
     {