[compiler-rt] r299884 - [msan] Choose in runtime if IPv4 or IPv6 are supported.

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 12 17:26:16 PDT 2017


Thanks Hal. I'll try to fix this. I guess ANY is OK there.

On Wed, Apr 12, 2017 at 5:04 PM Hal Finkel <hfinkel at anl.gov> wrote:

>
> On 04/12/2017 06:31 PM, Vitaly Buka wrote:
>
> Does this fail on just before? E.g. on r299883
> It's weird that it fails IpTests/MemorySanitizerIpTest.accept/*0* which
> suppose to be IPv4 as before.
>
>
> Both the /0 test which fail, and the /1 tests which fail, say where
> GetParam() = 10. The 10 is AF_INET6 (it would say 2 for AF_INET). So it is
> just the IPv6 tests that are failing.
>
> Heh; actually, I think the problem here is the code:
>
>
>   for (int i : std::vector<int>(AF_INET, AF_INET6)) {
>     int s = socket(i, SOCK_STREAM, 0);
>     if (s > 0) {
>       result.push_back(i);
>       close(s);
>     }
>   }
>
> std::vector<int>(AF_INET, AF_INET6) creates a vector of size 2 (because
> AF_INET == 2) where each element is initialized to AF_INET6. This is not
> what you intended.
>
> Also, it seems that the systems in my build cluster don't have valid IPv6
> loopback addresses. I did some quick tests and a bind on an IPv6 socket
> succeeds with in6addr_any but fails with in6addr_loopback. I suppose this
> makes sense because the lo interface does not seem to have an IPv6 address:
>
> $ ifconfig lo
> lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
>         inet 127.0.0.1  netmask 255.255.255.0
>         loop  txqueuelen 1  (Local Loopback)
>         RX packets ...
>
> I suspect this explains why the IPv6 tests, which want to bind to
> in6addr_loopback, fail.
>
> Thanks again,
> Hal
>
>
>
> On Wed, Apr 12, 2017 at 4:22 PM Vitaly Buka <vitalybuka at google.com> wrote:
>
>> Oh, my mistake squashing local git commits.
>> This CL reverts nothing.
>>
>> On Wed, Apr 12, 2017 at 4:07 PM Hal Finkel <hfinkel at anl.gov> wrote:
>>
>> FYI: This is failing on my build cluster. I see output like this:
>>
>> [ RUN      ] IpTests/MemorySanitizerIpTest.accept/0
>>
>> /home/hfinkel/public/src/llvm/projects/compiler-rt/lib/msan/tests/msan_test.cc:972:
>> Failure
>>        Expected: 0
>> To be equal to: res
>>        Which is: -1
>> [  FAILED  ] IpTests/MemorySanitizerIpTest.accept/0, where GetParam() =
>> 10 (3 ms)
>>
>> ...
>>
>>      MemorySanitizer-Unit ::
>> Msan-x86_64-Test/IpTests/MemorySanitizerIpTest.accept/0
>>      MemorySanitizer-Unit ::
>> Msan-x86_64-Test/IpTests/MemorySanitizerIpTest.accept/1
>>      MemorySanitizer-Unit ::
>> Msan-x86_64-Test/IpTests/MemorySanitizerIpTest.recvmsg/0
>>      MemorySanitizer-Unit ::
>> Msan-x86_64-Test/IpTests/MemorySanitizerIpTest.recvmsg/1
>>      MemorySanitizer-Unit ::
>> Msan-x86_64-with-call-Test/IpTests/MemorySanitizerIpTest.accept/0
>>      MemorySanitizer-Unit ::
>> Msan-x86_64-with-call-Test/IpTests/MemorySanitizerIpTest.accept/1
>>      MemorySanitizer-Unit ::
>> Msan-x86_64-with-call-Test/IpTests/MemorySanitizerIpTest.recvmsg/0
>>      MemorySanitizer-Unit ::
>> Msan-x86_64-with-call-Test/IpTests/MemorySanitizerIpTest.recvmsg/1
>>
>> The call to bind() is failing (i.e. returning -1).
>>
>> On 04/10/2017 04:03 PM, Vitaly Buka via llvm-commits wrote:
>> > Author: vitalybuka
>> > Date: Mon Apr 10 16:03:18 2017
>> > New Revision: 299884
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=299884&view=rev
>> > Log:
>> > [msan] Choose in runtime if IPv4 or IPv6 are supported.
>> >
>> > Summary: This reverts commit cab5051c691ce27a7ffac41e8e76ceb222ad9549.
>>
>> Which commit is this?
>>
>>   -Hal
>>
>> >
>> > Reviewers: eugenis
>> >
>> > Subscribers: mgorny, llvm-commits
>> >
>> > Differential Revision: https://reviews.llvm.org/D31894
>> >
>> > Modified:
>> >      compiler-rt/trunk/lib/msan/tests/CMakeLists.txt
>> >      compiler-rt/trunk/lib/msan/tests/msan_test.cc
>> >
>> > Modified: compiler-rt/trunk/lib/msan/tests/CMakeLists.txt
>> > URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/CMakeLists.txt?rev=299884&r1=299883&r2=299884&view=diff
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/lib/msan/tests/CMakeLists.txt (original)
>> > +++ compiler-rt/trunk/lib/msan/tests/CMakeLists.txt Mon Apr 10 16:03:18
>> 2017
>> > @@ -35,6 +35,7 @@ set(MSAN_UNITTEST_COMMON_CFLAGS
>> >     -Wno-zero-length-array
>> >     -Wno-uninitialized
>> >     -Werror=sign-compare
>> > +  -Wno-gnu-zero-variadic-macro-arguments
>> >   )
>> >   set(MSAN_UNITTEST_INSTRUMENTED_CFLAGS
>> >     ${MSAN_UNITTEST_COMMON_CFLAGS}
>> >
>> > Modified: compiler-rt/trunk/lib/msan/tests/msan_test.cc
>> > URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/msan_test.cc?rev=299884&r1=299883&r2=299884&view=diff
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/lib/msan/tests/msan_test.cc (original)
>> > +++ compiler-rt/trunk/lib/msan/tests/msan_test.cc Mon Apr 10 16:03:18
>> 2017
>> > @@ -902,9 +902,7 @@ class SocketAddr4 : public SocketAddr {
>> >       sai_.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
>> >     }
>> >
>> > -  sockaddr *ptr() override {
>> > -    return reinterpret_cast<sockaddr *>(&sai_);
>> > -  }
>> > +  sockaddr *ptr() override { return reinterpret_cast<sockaddr
>> *>(&sai_); }
>> >
>> >     size_t size() const override { return sizeof(sai_); }
>> >
>> > @@ -912,14 +910,60 @@ class SocketAddr4 : public SocketAddr {
>> >     sockaddr_in sai_;
>> >   };
>> >
>> > -template <class... Args>
>> > -std::unique_ptr<SocketAddr> CreateSockAddr(Args... args) {
>> > -  return std::unique_ptr<SocketAddr>(new SocketAddr4(args...));
>> > +class SocketAddr6 : public SocketAddr {
>> > + public:
>> > +  SocketAddr6() { EXPECT_POISONED(sai_); }
>> > +  explicit SocketAddr6(uint16_t port) {
>> > +    memset(&sai_, 0, sizeof(sai_));
>> > +    sai_.sin6_family = AF_INET6;
>> > +    sai_.sin6_port = port;
>> > +    sai_.sin6_addr = in6addr_loopback;
>> > +  }
>> > +
>> > +  sockaddr *ptr() override { return reinterpret_cast<sockaddr
>> *>(&sai_); }
>> > +
>> > +  size_t size() const override { return sizeof(sai_); }
>> > +
>> > + private:
>> > +  sockaddr_in6 sai_;
>> > +};
>> > +
>> > +class MemorySanitizerIpTest : public ::testing::TestWithParam<int> {
>> > + public:
>> > +  void SetUp() override {
>> > +    ASSERT_TRUE(GetParam() == AF_INET || GetParam() == AF_INET6);
>> > +  }
>> > +
>> > +  template <class... Args>
>> > +  std::unique_ptr<SocketAddr> CreateSockAddr(Args... args) const {
>> > +    if (GetParam() == AF_INET)
>> > +      return std::unique_ptr<SocketAddr>(new SocketAddr4(args...));
>> > +    return std::unique_ptr<SocketAddr>(new SocketAddr6(args...));
>> > +  }
>> > +
>> > +  int CreateSocket(int socket_type) const {
>> > +    return socket(GetParam(), socket_type, 0);
>> > +  }
>> > +};
>> > +
>> > +std::vector<int> GetAvailableIpSocketFamilies() {
>> > +  std::vector<int> result;
>> > +
>> > +  for (int i : std::vector<int>(AF_INET, AF_INET6)) {
>> > +    int s = socket(i, SOCK_STREAM, 0);
>> > +    if (s > 0) {
>> > +      result.push_back(i);
>> > +      close(s);
>> > +    }
>> > +  }
>> > +
>> > +  return result;
>> >   }
>> >
>> > -int CreateSocket(int socket_type) { return socket(AF_INET,
>> socket_type, 0); }
>> > +INSTANTIATE_TEST_CASE_P(IpTests, MemorySanitizerIpTest,
>> > +
>> ::testing::ValuesIn(GetAvailableIpSocketFamilies()));
>> >
>> > -TEST(MemorySanitizer, accept) {
>> > +TEST_P(MemorySanitizerIpTest, accept) {
>> >     int listen_socket = CreateSocket(SOCK_STREAM);
>> >     ASSERT_LT(0, listen_socket);
>> >
>> > @@ -963,7 +1007,7 @@ TEST(MemorySanitizer, accept) {
>> >     close(listen_socket);
>> >   }
>> >
>> > -TEST(MemorySanitizer, recvmsg) {
>> > +TEST_P(MemorySanitizerIpTest, recvmsg) {
>> >     int server_socket = CreateSocket(SOCK_DGRAM);
>> >     ASSERT_LT(0, server_socket);
>> >
>> >
>> >
>> > _______________________________________________
>> > llvm-commits mailing list
>> > llvm-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>> --
>> Hal Finkel
>> Lead, Compiler Technology and Programming Languages
>> Leadership Computing Facility
>> Argonne National Laboratory
>>
>>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170413/fd7f33e3/attachment-0001.html>


More information about the llvm-commits mailing list