Workaround for b/30067360.
/proc/self/environ inaccessible in SurfaceFlinger
=> ASan fails to read ASAN_OPTIONS => alloc-dealloc-mismatch bug is not
suppressed and prevents the device from booting.
This is not perfect because, by enabling it in asan build only, the first several attempts to start
surfaceflinger fail while the /data partition is being encrypted. On the other hand, this does not affect
user builds, and device eventually gets up anyway.
Change-Id: I5803a1688c2218cd1c36e04473f588ca28f9689f
diff --git a/services/surfaceflinger/SurfaceFlinger_hwc1.cpp b/services/surfaceflinger/SurfaceFlinger_hwc1.cpp
index 868280d..fa980f6 100644
--- a/services/surfaceflinger/SurfaceFlinger_hwc1.cpp
+++ b/services/surfaceflinger/SurfaceFlinger_hwc1.cpp
@@ -90,6 +90,19 @@
EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint name);
+// Workaround for b/30067360: /proc/self/environ inaccessible in SurfaceFlinger
+// => ASan fails to read ASAN_OPTIONS => alloc-dealloc-mismatch bug is not
+// suppressed and prevents the device from booting.
+#ifndef __has_feature
+#define __has_feature(x) 0
+#endif
+#if __has_feature(address_sanitizer)
+__attribute__((visibility("default")))
+extern "C" const char *__asan_default_options() {
+ return "alloc_dealloc_mismatch=0";
+}
+#endif
+
namespace android {
// This is the phase offset in nanoseconds of the software vsync event