Skip to content

Commit c5e73d6

Browse files
committed
[msan] Choose in runtime if IPv4 or IPv6 are supported.
Summary: This reverts commit cab5051c691ce27a7ffac41e8e76ceb222ad9549. Reviewers: eugenis Subscribers: mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D31894 llvm-svn: 299884
1 parent d4a3397 commit c5e73d6

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

compiler-rt/lib/msan/tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ set(MSAN_UNITTEST_COMMON_CFLAGS
3535
-Wno-zero-length-array
3636
-Wno-uninitialized
3737
-Werror=sign-compare
38+
-Wno-gnu-zero-variadic-macro-arguments
3839
)
3940
set(MSAN_UNITTEST_INSTRUMENTED_CFLAGS
4041
${MSAN_UNITTEST_COMMON_CFLAGS}

compiler-rt/lib/msan/tests/msan_test.cc

Lines changed: 53 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -902,24 +902,68 @@ class SocketAddr4 : public SocketAddr {
902902
sai_.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
903903
}
904904

905-
sockaddr *ptr() override {
906-
return reinterpret_cast<sockaddr *>(&sai_);
907-
}
905+
sockaddr *ptr() override { return reinterpret_cast<sockaddr *>(&sai_); }
908906

909907
size_t size() const override { return sizeof(sai_); }
910908

911909
private:
912910
sockaddr_in sai_;
913911
};
914912

915-
template <class... Args>
916-
std::unique_ptr<SocketAddr> CreateSockAddr(Args... args) {
917-
return std::unique_ptr<SocketAddr>(new SocketAddr4(args...));
913+
class SocketAddr6 : public SocketAddr {
914+
public:
915+
SocketAddr6() { EXPECT_POISONED(sai_); }
916+
explicit SocketAddr6(uint16_t port) {
917+
memset(&sai_, 0, sizeof(sai_));
918+
sai_.sin6_family = AF_INET6;
919+
sai_.sin6_port = port;
920+
sai_.sin6_addr = in6addr_loopback;
921+
}
922+
923+
sockaddr *ptr() override { return reinterpret_cast<sockaddr *>(&sai_); }
924+
925+
size_t size() const override { return sizeof(sai_); }
926+
927+
private:
928+
sockaddr_in6 sai_;
929+
};
930+
931+
class MemorySanitizerIpTest : public ::testing::TestWithParam<int> {
932+
public:
933+
void SetUp() override {
934+
ASSERT_TRUE(GetParam() == AF_INET || GetParam() == AF_INET6);
935+
}
936+
937+
template <class... Args>
938+
std::unique_ptr<SocketAddr> CreateSockAddr(Args... args) const {
939+
if (GetParam() == AF_INET)
940+
return std::unique_ptr<SocketAddr>(new SocketAddr4(args...));
941+
return std::unique_ptr<SocketAddr>(new SocketAddr6(args...));
942+
}
943+
944+
int CreateSocket(int socket_type) const {
945+
return socket(GetParam(), socket_type, 0);
946+
}
947+
};
948+
949+
std::vector<int> GetAvailableIpSocketFamilies() {
950+
std::vector<int> result;
951+
952+
for (int i : std::vector<int>(AF_INET, AF_INET6)) {
953+
int s = socket(i, SOCK_STREAM, 0);
954+
if (s > 0) {
955+
result.push_back(i);
956+
close(s);
957+
}
958+
}
959+
960+
return result;
918961
}
919962

920-
int CreateSocket(int socket_type) { return socket(AF_INET, socket_type, 0); }
963+
INSTANTIATE_TEST_CASE_P(IpTests, MemorySanitizerIpTest,
964+
::testing::ValuesIn(GetAvailableIpSocketFamilies()));
921965

922-
TEST(MemorySanitizer, accept) {
966+
TEST_P(MemorySanitizerIpTest, accept) {
923967
int listen_socket = CreateSocket(SOCK_STREAM);
924968
ASSERT_LT(0, listen_socket);
925969

@@ -963,7 +1007,7 @@ TEST(MemorySanitizer, accept) {
9631007
close(listen_socket);
9641008
}
9651009

966-
TEST(MemorySanitizer, recvmsg) {
1010+
TEST_P(MemorySanitizerIpTest, recvmsg) {
9671011
int server_socket = CreateSocket(SOCK_DGRAM);
9681012
ASSERT_LT(0, server_socket);
9691013

0 commit comments

Comments
 (0)