@@ -1615,6 +1615,40 @@ TEST_F(tls, getsockopt)
1615
1615
EXPECT_EQ (errno , EINVAL );
1616
1616
}
1617
1617
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
+
1618
1652
FIXTURE (tls_err )
1619
1653
{
1620
1654
int fd , cfd ;
0 commit comments