[Tizen] Enable ASan annotation of passing to native code buffers
[platform/upstream/coreclr.git] / src / pal / src / memory / local.cpp
index 7a709ef..44d9feb 100644 (file)
@@ -1,7 +1,6 @@
-//
-// Copyright (c) Microsoft. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information. 
-//
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
 
 /*++
 
@@ -27,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,
@@ -71,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 );
@@ -129,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
     {