Skip to content

Commit eaa429c

Browse files
author
Sabrina Dubroca
committed
selftests: tls: check that disconnect does nothing
JIRA: https://issues.redhat.com/browse/RHEL-115640 Conflicts: missing rekey tests and extra argument to tls_crypto_info_init commit a1328a6 Author: Jakub Kicinski <kuba@kernel.org> Date: Fri Apr 4 11:03:34 2025 -0700 selftests: tls: check that disconnect does nothing "Inspired" by syzbot test, pre-queue some data, disconnect() and try to receive(). This used to trigger a warning in TLS's strp. Now we expect the disconnect() to have almost no effect. Link: https://lore.kernel.org/67e6be74.050a0220.2f068f.007e.GAE@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Sabrina Dubroca <sd@queasysnail.net> Link: https://patch.msgid.link/20250404180334.3224206-2-kuba@kernel.org Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Sabrina Dubroca <sdubroca@redhat.com>
1 parent 7e1bb10 commit eaa429c

File tree

1 file changed

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

1 file changed

+35
-0
lines changed

tools/testing/selftests/net/tls.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1630,6 +1630,41 @@ TEST_F(tls, recv_efault)
16301630
EXPECT_EQ(memcmp(rec2, recv_mem + 9, ret - 9), 0);
16311631
}
16321632

1633+
TEST_F(tls_basic, disconnect)
1634+
{
1635+
char const *test_str = "test_message";
1636+
int send_len = strlen(test_str) + 1;
1637+
struct tls_crypto_info_keys key;
1638+
struct sockaddr_in addr;
1639+
char buf[20];
1640+
int ret;
1641+
1642+
if (self->notls)
1643+
return;
1644+
1645+
tls_crypto_info_init(TLS_1_3_VERSION, TLS_CIPHER_AES_GCM_128, &key);
1646+
1647+
ret = setsockopt(self->fd, SOL_TLS, TLS_TX, &key, key.len);
1648+
ASSERT_EQ(ret, 0);
1649+
1650+
/* Pre-queue the data so that setsockopt parses it but doesn't
1651+
* dequeue it from the TCP socket. recvmsg would dequeue.
1652+
*/
1653+
EXPECT_EQ(send(self->fd, test_str, send_len, 0), send_len);
1654+
1655+
ret = setsockopt(self->cfd, SOL_TLS, TLS_RX, &key, key.len);
1656+
ASSERT_EQ(ret, 0);
1657+
1658+
addr.sin_family = AF_UNSPEC;
1659+
addr.sin_addr.s_addr = htonl(INADDR_ANY);
1660+
addr.sin_port = 0;
1661+
ret = connect(self->cfd, &addr, sizeof(addr));
1662+
EXPECT_EQ(ret, -1);
1663+
EXPECT_EQ(errno, EOPNOTSUPP);
1664+
1665+
EXPECT_EQ(recv(self->cfd, buf, send_len, 0), send_len);
1666+
}
1667+
16331668
struct raw_rec {
16341669
unsigned int plain_len;
16351670
unsigned char plain_data[100];

0 commit comments

Comments
 (0)