[PATCH] D47960: [asan, myriad] Support environment variables

Walter Lee via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 8 14:56:01 PDT 2018


waltl created this revision.
waltl added reviewers: vitalybuka, eugenis, alekseyshl.
Herald added a subscriber: kubamracek.

Provide a buffer that the test harness can write into to provide
values for the environment variables.  Format is a null-separated list
of VAR=value pairs; this is sufficent for our purpose.


Repository:
  rL LLVM

https://reviews.llvm.org/D47960

Files:
  compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc


Index: compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc
===================================================================
--- compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc
+++ compiler-rt/lib/sanitizer_common/sanitizer_rtems.cc
@@ -34,6 +34,11 @@
 #define __mmap_free free
 #define __mmap_memset memset
 
+static const __asan::uptr __sanitizer_env_len = 1024;
+// This variable needs to not be in .bss because we don't want
+// zero-initialization by the OS.
+char __sanitizer_env[__sanitizer_env_len] __attribute__((section(".data")));
+
 namespace __sanitizer {
 
 #include "sanitizer_syscall_generic.inc"
@@ -239,8 +244,26 @@
   return true;
 }
 
-char **GetArgv() { return NULL; }
-const char *GetEnv(const char *name) { return NULL; }
+char **GetArgv() { return nullptr; }
+
+const char *GetEnv(const char *name) {
+  char *const env = __sanitizer_env;
+  uptr env_len = __sanitizer_env_len;
+  // To avoid buffer overrun, give up if buffer is not null terminated.
+  if (env[env_len - 1] != '\0')
+    return nullptr;
+
+  uptr name_len = internal_strlen(name);
+  uptr end = env_len - name_len - 2;
+  uptr i = 0;
+  while (i <= end) {
+    if (internal_strncmp(&env[i], name, name_len) == 0 &&
+        env[i + name_len] == '=')
+      return &env[i + name_len + 1];
+    i += internal_strlen(env) + 1;
+  }
+  return nullptr;
+}
 
 uptr ReadBinaryName(/*out*/char *buf, uptr buf_len) {
   internal_strncpy(buf, "StubBinaryName", buf_len);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47960.150576.patch
Type: text/x-patch
Size: 1459 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180608/0215e57c/attachment.bin>


More information about the llvm-commits mailing list