[compiler-rt] r183529 - [sanitizer] Handle SIOCGIFCONF ioctl.

Lang Hames lhames at gmail.com
Fri Jun 7 13:53:36 PDT 2013


Thanks Bill.

- Lang.


On Fri, Jun 7, 2013 at 1:30 PM, Bill Wendling <wendling at apple.com> wrote:

> I reverted it...
>
> -bw
>
> On Jun 7, 2013, at 11:51 AM, Evgeniy Stepanov <eugeni.stepanov at gmail.com>
> wrote:
>
> > I'm having technical issues. I wonder if someone could revert this
> > change for me?
> >
> > On Fri, Jun 7, 2013 at 10:32 PM, Evgeniy Stepanov
> > <eugeni.stepanov at gmail.com> wrote:
> >> I'll revert in a minute.
> >>
> >> On Fri, Jun 7, 2013 at 10:11 PM, Lang Hames <lhames at gmail.com> wrote:
> >>> Hi Evgeniy,
> >>>
> >>> Looks like this patch broke some of the bots, e.g.
> >>>
> http://lab.llvm.org:8013/builders/clang-x86_64-darwin11-nobootstrap-RAincremental/builds/2695
> >>>
> >>> Could you please fix or revert it?
> >>>
> >>> Thanks!
> >>>
> >>> - Lang.
> >>>
> >>>
> >>> On Fri, Jun 7, 2013 at 8:49 AM, Evgeniy Stepanov <
> eugeni.stepanov at gmail.com>
> >>> wrote:
> >>>>
> >>>> Author: eugenis
> >>>> Date: Fri Jun  7 10:49:38 2013
> >>>> New Revision: 183529
> >>>>
> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=183529&view=rev
> >>>> Log:
> >>>> [sanitizer] Handle SIOCGIFCONF ioctl.
> >>>>
> >>>> Added:
> >>>>    compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc   (with props)
> >>>> Modified:
> >>>>
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
> >>>>
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
> >>>>
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h
> >>>>
> >>>> Added: compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc
> >>>> URL:
> >>>>
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc?rev=183529&view=auto
> >>>>
> >>>>
> ==============================================================================
> >>>> --- compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc (added)
> >>>> +++ compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc Fri Jun  7
> >>>> 10:49:38 2013
> >>>> @@ -0,0 +1,33 @@
> >>>> +// RUN: %clangxx_msan -m64 -O0 -g %s -o %t && %t
> >>>> +// RUN: %clangxx_msan -m64 -O3 -g %s -o %t && %t
> >>>> +
> >>>> +// RUN: %clangxx_msan -DPOSITIVE -m64 -O0 -g %s -o %t && %t 2>&1 |
> >>>> FileCheck %s
> >>>> +// RUN: %clangxx_msan -DPOSITIVE -m64 -O3 -g %s -o %t && %t 2>&1 |
> >>>> FileCheck %s
> >>>> +
> >>>> +#include <assert.h>
> >>>> +#include <stdlib.h>
> >>>> +#include <net/if.h>
> >>>> +#include <stdio.h>
> >>>> +#include <string.h>
> >>>> +#include <sys/ioctl.h>
> >>>> +#include <sys/socket.h>
> >>>> +#include <unistd.h>
> >>>> +
> >>>> +int main(int argc, char **argv) {
> >>>> +  int fd = socket(AF_INET, SOCK_STREAM, 0);
> >>>> +
> >>>> +  struct ifreq ifreqs[20];
> >>>> +  struct ifconf ifc;
> >>>> +  ifc.ifc_ifcu.ifcu_req = ifreqs;
> >>>> +#ifndef POSITIVE
> >>>> +  ifc.ifc_len = sizeof(ifreqs);
> >>>> +#endif
> >>>> +  int res = ioctl(fd, SIOCGIFCONF, (void *)&ifc);
> >>>> +  // CHECK: UMR in ioctl{{.*}} at offset 0
> >>>> +  // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value
> >>>> +  // CHECK: #{{.*}} in main {{.*}}ioctl_custom.cc:[[@LINE-3]]
> >>>> +  assert(res == 0);
> >>>> +  for (int i = 0; i < ifc.ifc_len / sizeof(*ifc.ifc_ifcu.ifcu_req);
> ++i)
> >>>> +    printf("%d  %zu  %s\n", i, strlen(ifreqs[i].ifr_name),
> >>>> ifreqs[i].ifr_name);
> >>>> +  return 0;
> >>>> +}
> >>>>
> >>>> Propchange: compiler-rt/trunk/lib/msan/lit_tests/ioctl_custom.cc
> >>>>
> >>>>
> ------------------------------------------------------------------------------
> >>>>    svn:eol-style = LF
> >>>>
> >>>> Modified:
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
> >>>> URL:
> >>>>
> 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
> >>>>
> >>>>
> ==============================================================================
> >>>> ---
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
> >>>> (original)
> >>>> +++
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
> >>>> Fri Jun  7 10:49:38 2013
> >>>> @@ -66,7 +66,7 @@ static void ioctl_table_fill() {
> >>>>   _(0x00008903, WRITE, sizeof(int));             // FIOGETOWN
> >>>>   _(0x00008904, WRITE, sizeof(int));             // SIOCGPGRP
> >>>>   _(0x00008905, WRITE, sizeof(int));             // SIOCATMAR
> >>>> -  _(0x00008912, WRITE, struct_ifconf_sz);        // SIOCGIFCONF
> >>>> +  _(0x00008912, CUSTOM, 0);                      // SIOCGIFCONF
> >>>>   _(0x00008913, WRITE, struct_ifreq_sz);         // SIOCGIFFLAGS
> >>>>   _(0x00008914, READ, struct_ifreq_sz);          // SIOCSIFFLAGS
> >>>>   _(0x00008915, WRITE, struct_ifreq_sz);         // SIOCGIFADDR
> >>>> @@ -502,7 +502,13 @@ static void ioctl_common_pre(void *ctx,
> >>>>     COMMON_INTERCEPTOR_READ_RANGE(ctx, arg, desc->size);
> >>>>   if (desc->type != ioctl_desc::CUSTOM)
> >>>>     return;
> >>>> -  // FIXME: add some ioctls of "CUSTOM" type and handle them here.
> >>>> +  switch (request) {
> >>>> +    case 0x00008912: {  // SIOCGIFCONF
> >>>> +      struct __sanitizer_ifconf *ifc = (__sanitizer_ifconf *)arg;
> >>>> +      COMMON_INTERCEPTOR_READ_RANGE(ctx, &ifc->ifc_len,
> >>>> sizeof(ifc->ifc_len));
> >>>> +      break;
> >>>> +    }
> >>>> +  }
> >>>>   return;
> >>>> }
> >>>>
> >>>> @@ -514,5 +520,12 @@ static void ioctl_common_post(void *ctx,
> >>>>   }
> >>>>   if (desc->type != ioctl_desc::CUSTOM)
> >>>>     return;
> >>>> -  return; // FIXME
> >>>> +  switch (request) {
> >>>> +    case 0x00008912: {  // SIOCGIFCONF
> >>>> +      struct __sanitizer_ifconf *ifc = (__sanitizer_ifconf *)arg;
> >>>> +      COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ifc->ifc_ifcu.ifcu_req,
> >>>> ifc->ifc_len);
> >>>> +      break;
> >>>> +    }
> >>>> +  }
> >>>> +  return;
> >>>> }
> >>>>
> >>>> Modified:
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
> >>>> URL:
> >>>>
> 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
> >>>>
> >>>>
> ==============================================================================
> >>>> ---
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
> >>>> (original)
> >>>> +++
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
> >>>> Fri Jun  7 10:49:38 2013
> >>>> @@ -150,7 +150,6 @@ namespace __sanitizer {
> >>>>
> >>>>   // ioctl arguments
> >>>>   unsigned struct_arpreq_sz = sizeof(struct arpreq);
> >>>> -  unsigned struct_ifconf_sz = sizeof(struct ifconf);
> >>>>   unsigned struct_ifreq_sz = sizeof(struct ifreq);
> >>>>   unsigned struct_termios_sz = sizeof(struct termios);
> >>>>   unsigned struct_winsize_sz = sizeof(struct winsize);
> >>>> @@ -280,4 +279,9 @@ CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len)
> >>>> CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level);
> >>>> CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type);
> >>>>
> >>>> +CHECK_TYPE_SIZE(ifconf);
> >>>> +CHECK_SIZE_AND_OFFSET(ifconf, ifc_len);
> >>>> +CHECK_SIZE_AND_OFFSET(ifconf, ifc_ifcu);
> >>>> +
> >>>> #endif  // SANITIZER_LINUX || SANITIZER_MAC
> >>>> +
> >>>>
> >>>> Modified:
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h
> >>>> URL:
> >>>>
> 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
> >>>>
> >>>>
> ==============================================================================
> >>>> ---
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h
> >>>> (original)
> >>>> +++
> >>>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h Fri
> >>>> Jun  7 10:49:38 2013
> >>>> @@ -149,8 +149,14 @@ namespace __sanitizer {
> >>>>   };
> >>>>
> >>>>   // ioctl arguments
> >>>> +  struct __sanitizer_ifconf {
> >>>> +    int ifc_len;
> >>>> +    union {
> >>>> +      void *ifcu_req;
> >>>> +    } ifc_ifcu;
> >>>> +  };
> >>>> +
> >>>>   extern unsigned struct_arpreq_sz;
> >>>> -  extern unsigned struct_ifconf_sz;
> >>>>   extern unsigned struct_ifreq_sz;
> >>>>   extern unsigned struct_termios_sz;
> >>>>   extern unsigned struct_winsize_sz;
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> llvm-commits mailing list
> >>>> llvm-commits at cs.uiuc.edu
> >>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >>>
> >>>
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130607/778f4271/attachment.html>


More information about the llvm-commits mailing list