<div dir="ltr">Hi Evgeniy,<div><br></div><div style>Looks like this patch broke some of the bots, e.g. <a href="http://lab.llvm.org:8013/builders/clang-x86_64-darwin11-nobootstrap-RAincremental/builds/2695">http://lab.llvm.org:8013/builders/clang-x86_64-darwin11-nobootstrap-RAincremental/builds/2695</a></div>
<div style><br></div><div style>Could you please fix or revert it?</div><div style><br></div><div style>Thanks!</div><div style><br></div><div style>- Lang.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Fri, Jun 7, 2013 at 8:49 AM, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: eugenis<br>
Date: Fri Jun  7 10:49:38 2013<br>
New Revision: 183529<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=183529&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=183529&view=rev</a><br>
Log:<br>
[sanitizer] Handle SIOCGIFCONF ioctl.<br>
<br>
Added:<br>
    compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc   (with props)<br>
Modified:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h<br>
<br>
Added: compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc?rev=183529&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc?rev=183529&view=auto</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc (added)<br>
+++ compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc Fri Jun  7 10:49:38 2013<br>
@@ -0,0 +1,33 @@<br>
+// RUN: %clangxx_msan -m64 -O0 -g %s -o %t && %t<br>
+// RUN: %clangxx_msan -m64 -O3 -g %s -o %t && %t<br>
+<br>
+// RUN: %clangxx_msan -DPOSITIVE -m64 -O0 -g %s -o %t && %t 2>&1 | FileCheck %s<br>
+// RUN: %clangxx_msan -DPOSITIVE -m64 -O3 -g %s -o %t && %t 2>&1 | FileCheck %s<br>
+<br>
+#include <assert.h><br>
+#include <stdlib.h><br>
+#include <net/if.h><br>
+#include <stdio.h><br>
+#include <string.h><br>
+#include <sys/ioctl.h><br>
+#include <sys/socket.h><br>
+#include <unistd.h><br>
+<br>
+int main(int argc, char **argv) {<br>
+  int fd = socket(AF_INET, SOCK_STREAM, 0);<br>
+<br>
+  struct ifreq ifreqs[20];<br>
+  struct ifconf ifc;<br>
+  ifc.ifc_ifcu.ifcu_req = ifreqs;<br>
+#ifndef POSITIVE<br>
+  ifc.ifc_len = sizeof(ifreqs);<br>
+#endif<br>
+  int res = ioctl(fd, SIOCGIFCONF, (void *)&ifc);<br>
+  // CHECK: UMR in ioctl{{.*}} at offset 0<br>
+  // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value<br>
+  // CHECK: #{{.*}} in main {{.*}}ioctl_custom.cc:[[@LINE-3]]<br>
+  assert(res == 0);<br>
+  for (int i = 0; i < ifc.ifc_len / sizeof(*ifc.ifc_ifcu.ifcu_req); ++i)<br>
+    printf("%d  %zu  %s\n", i, strlen(ifreqs[i].ifr_name), ifreqs[i].ifr_name);<br>
+  return 0;<br>
+}<br>
<br>
Propchange: compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc<br>
------------------------------------------------------------------------------<br>
    svn:eol-style = LF<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc?rev=183529&r1=183528&r2=183529&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc?rev=183529&r1=183528&r2=183529&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc Fri Jun  7 10:49:38 2013<br>
@@ -66,7 +66,7 @@ static void ioctl_table_fill() {<br>
   _(0x00008903, WRITE, sizeof(int));             // FIOGETOWN<br>
   _(0x00008904, WRITE, sizeof(int));             // SIOCGPGRP<br>
   _(0x00008905, WRITE, sizeof(int));             // SIOCATMAR<br>
-  _(0x00008912, WRITE, struct_ifconf_sz);        // SIOCGIFCONF<br>
+  _(0x00008912, CUSTOM, 0);                      // SIOCGIFCONF<br>
   _(0x00008913, WRITE, struct_ifreq_sz);         // SIOCGIFFLAGS<br>
   _(0x00008914, READ, struct_ifreq_sz);          // SIOCSIFFLAGS<br>
   _(0x00008915, WRITE, struct_ifreq_sz);         // SIOCGIFADDR<br>
@@ -502,7 +502,13 @@ static void ioctl_common_pre(void *ctx,<br>
     COMMON_INTERCEPTOR_READ_RANGE(ctx, arg, desc->size);<br>
   if (desc->type != ioctl_desc::CUSTOM)<br>
     return;<br>
-  // FIXME: add some ioctls of "CUSTOM" type and handle them here.<br>
+  switch (request) {<br>
+    case 0x00008912: {  // SIOCGIFCONF<br>
+      struct __sanitizer_ifconf *ifc = (__sanitizer_ifconf *)arg;<br>
+      COMMON_INTERCEPTOR_READ_RANGE(ctx, &ifc->ifc_len, sizeof(ifc->ifc_len));<br>
+      break;<br>
+    }<br>
+  }<br>
   return;<br>
 }<br>
<br>
@@ -514,5 +520,12 @@ static void ioctl_common_post(void *ctx,<br>
   }<br>
   if (desc->type != ioctl_desc::CUSTOM)<br>
     return;<br>
-  return; // FIXME<br>
+  switch (request) {<br>
+    case 0x00008912: {  // SIOCGIFCONF<br>
+      struct __sanitizer_ifconf *ifc = (__sanitizer_ifconf *)arg;<br>
+      COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ifc->ifc_ifcu.ifcu_req, ifc->ifc_len);<br>
+      break;<br>
+    }<br>
+  }<br>
+  return;<br>
 }<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc?rev=183529&r1=183528&r2=183529&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc?rev=183529&r1=183528&r2=183529&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc Fri Jun  7 10:49:38 2013<br>
@@ -150,7 +150,6 @@ namespace __sanitizer {<br>
<br>
   // ioctl arguments<br>
   unsigned struct_arpreq_sz = sizeof(struct arpreq);<br>
-  unsigned struct_ifconf_sz = sizeof(struct ifconf);<br>
   unsigned struct_ifreq_sz = sizeof(struct ifreq);<br>
   unsigned struct_termios_sz = sizeof(struct termios);<br>
   unsigned struct_winsize_sz = sizeof(struct winsize);<br>
@@ -280,4 +279,9 @@ CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len)<br>
 CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level);<br>
 CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type);<br>
<br>
+CHECK_TYPE_SIZE(ifconf);<br>
+CHECK_SIZE_AND_OFFSET(ifconf, ifc_len);<br>
+CHECK_SIZE_AND_OFFSET(ifconf, ifc_ifcu);<br>
+<br>
 #endif  // SANITIZER_LINUX || SANITIZER_MAC<br>
+<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h?rev=183529&r1=183528&r2=183529&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h?rev=183529&r1=183528&r2=183529&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h Fri Jun  7 10:49:38 2013<br>
@@ -149,8 +149,14 @@ namespace __sanitizer {<br>
   };<br>
<br>
   // ioctl arguments<br>
+  struct __sanitizer_ifconf {<br>
+    int ifc_len;<br>
+    union {<br>
+      void *ifcu_req;<br>
+    } ifc_ifcu;<br>
+  };<br>
+<br>
   extern unsigned struct_arpreq_sz;<br>
-  extern unsigned struct_ifconf_sz;<br>
   extern unsigned struct_ifreq_sz;<br>
   extern unsigned struct_termios_sz;<br>
   extern unsigned struct_winsize_sz;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>