selftests/tls: add a litmus test for the socket reuse through shutdown
authorJakub Kicinski <jakub.kicinski@netronome.com>
Thu, 1 Aug 2019 21:36:02 +0000 (14:36 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 5 Aug 2019 20:15:30 +0000 (13:15 -0700)
Make sure that shutdown never works, and at the same time document how
I tested to came to the conclusion that currently reuse is not possible.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/tls.c

index d995e6503b1ac2e53a27f00ce962e36b5bb86e48..4c285b6e1db8c1713b70e6be5092b780bb5e0d6a 100644 (file)
@@ -984,6 +984,30 @@ TEST_F(tls, shutdown_unsent)
        shutdown(self->cfd, SHUT_RDWR);
 }
 
+TEST_F(tls, shutdown_reuse)
+{
+       struct sockaddr_in addr;
+       int ret;
+
+       shutdown(self->fd, SHUT_RDWR);
+       shutdown(self->cfd, SHUT_RDWR);
+       close(self->cfd);
+
+       addr.sin_family = AF_INET;
+       addr.sin_addr.s_addr = htonl(INADDR_ANY);
+       addr.sin_port = 0;
+
+       ret = bind(self->fd, &addr, sizeof(addr));
+       EXPECT_EQ(ret, 0);
+       ret = listen(self->fd, 10);
+       EXPECT_EQ(ret, -1);
+       EXPECT_EQ(errno, EINVAL);
+
+       ret = connect(self->fd, &addr, sizeof(addr));
+       EXPECT_EQ(ret, -1);
+       EXPECT_EQ(errno, EISCONN);
+}
+
 TEST(non_established) {
        struct tls12_crypto_info_aes_gcm_256 tls12;
        struct sockaddr_in addr;