Skip to content

Commit f884a34

Browse files
committed
selftests: tls: test for correct proto_ops
Previous patch fixes overriding callbacks incorrectly. Triggering the crash in sendpage_locked would be more spectacular but it's hard to get to, so take the easier path of proving this is broken and call getname. We're currently getting IPv4 socket info on an IPv6 socket. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent f3911f7 commit f884a34

File tree

1 file changed

+55
-0
lines changed
  • tools/testing/selftests/net

1 file changed

+55
-0
lines changed

tools/testing/selftests/net/tls.c

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,4 +1617,59 @@ TEST(keysizes) {
16171617
close(cfd);
16181618
}
16191619

1620+
TEST(tls_v6ops) {
1621+
struct tls_crypto_info_keys tls12;
1622+
struct sockaddr_in6 addr, addr2;
1623+
int sfd, ret, fd;
1624+
socklen_t len, len2;
1625+
1626+
tls_crypto_info_init(TLS_1_2_VERSION, TLS_CIPHER_AES_GCM_128, &tls12);
1627+
1628+
addr.sin6_family = AF_INET6;
1629+
addr.sin6_addr = in6addr_any;
1630+
addr.sin6_port = 0;
1631+
1632+
fd = socket(AF_INET6, SOCK_STREAM, 0);
1633+
sfd = socket(AF_INET6, SOCK_STREAM, 0);
1634+
1635+
ret = bind(sfd, &addr, sizeof(addr));
1636+
ASSERT_EQ(ret, 0);
1637+
ret = listen(sfd, 10);
1638+
ASSERT_EQ(ret, 0);
1639+
1640+
len = sizeof(addr);
1641+
ret = getsockname(sfd, &addr, &len);
1642+
ASSERT_EQ(ret, 0);
1643+
1644+
ret = connect(fd, &addr, sizeof(addr));
1645+
ASSERT_EQ(ret, 0);
1646+
1647+
len = sizeof(addr);
1648+
ret = getsockname(fd, &addr, &len);
1649+
ASSERT_EQ(ret, 0);
1650+
1651+
ret = setsockopt(fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"));
1652+
if (ret) {
1653+
ASSERT_EQ(errno, ENOENT);
1654+
SKIP(return, "no TLS support");
1655+
}
1656+
ASSERT_EQ(ret, 0);
1657+
1658+
ret = setsockopt(fd, SOL_TLS, TLS_TX, &tls12, tls12.len);
1659+
ASSERT_EQ(ret, 0);
1660+
1661+
ret = setsockopt(fd, SOL_TLS, TLS_RX, &tls12, tls12.len);
1662+
ASSERT_EQ(ret, 0);
1663+
1664+
len2 = sizeof(addr2);
1665+
ret = getsockname(fd, &addr2, &len2);
1666+
ASSERT_EQ(ret, 0);
1667+
1668+
EXPECT_EQ(len2, len);
1669+
EXPECT_EQ(memcmp(&addr, &addr2, len), 0);
1670+
1671+
close(fd);
1672+
close(sfd);
1673+
}
1674+
16201675
TEST_HARNESS_MAIN

0 commit comments

Comments
 (0)