Skip to content

Commit dc54b81

Browse files
qsnkuba-moo
authored andcommitted
selftests: tls: add test with a partially invalid iov
Make sure that we don't return more bytes than we actually received if the userspace buffer was bogus. We expect to receive at least the rest of rec1, and possibly some of rec2 (currently, we don't, but that would be ok). Signed-off-by: Sabrina Dubroca <[email protected]> Reviewed-by: Simon Horman <[email protected]> Link: https://lore.kernel.org/r/720e61b3d3eab40af198a58ce2cd1ee019f0ceb1.1711120964.git.sd@queasysnail.net Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 85eef9a commit dc54b81

File tree

1 file changed

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

1 file changed

+34
-0
lines changed

tools/testing/selftests/net/tls.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,6 +1615,40 @@ TEST_F(tls, getsockopt)
16151615
EXPECT_EQ(errno, EINVAL);
16161616
}
16171617

1618+
TEST_F(tls, recv_efault)
1619+
{
1620+
char *rec1 = "1111111111";
1621+
char *rec2 = "2222222222";
1622+
struct msghdr hdr = {};
1623+
struct iovec iov[2];
1624+
char recv_mem[12];
1625+
int ret;
1626+
1627+
if (self->notls)
1628+
SKIP(return, "no TLS support");
1629+
1630+
EXPECT_EQ(send(self->fd, rec1, 10, 0), 10);
1631+
EXPECT_EQ(send(self->fd, rec2, 10, 0), 10);
1632+
1633+
iov[0].iov_base = recv_mem;
1634+
iov[0].iov_len = sizeof(recv_mem);
1635+
iov[1].iov_base = NULL; /* broken iov to make process_rx_list fail */
1636+
iov[1].iov_len = 1;
1637+
1638+
hdr.msg_iovlen = 2;
1639+
hdr.msg_iov = iov;
1640+
1641+
EXPECT_EQ(recv(self->cfd, recv_mem, 1, 0), 1);
1642+
EXPECT_EQ(recv_mem[0], rec1[0]);
1643+
1644+
ret = recvmsg(self->cfd, &hdr, 0);
1645+
EXPECT_LE(ret, sizeof(recv_mem));
1646+
EXPECT_GE(ret, 9);
1647+
EXPECT_EQ(memcmp(rec1, recv_mem, 9), 0);
1648+
if (ret > 9)
1649+
EXPECT_EQ(memcmp(rec2, recv_mem + 9, ret - 9), 0);
1650+
}
1651+
16181652
FIXTURE(tls_err)
16191653
{
16201654
int fd, cfd;

0 commit comments

Comments
 (0)