mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Add a syscall test exercising dualstack address family mismatches
Verify that the connect call returns the proper errno when asked to connect to a remote IP in a different address family than the local IP. PiperOrigin-RevId: 581919473
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <atomic>
|
||||
#include <cerrno>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@@ -218,6 +219,42 @@ INSTANTIATE_TEST_SUITE_P(
|
||||
return s;
|
||||
});
|
||||
|
||||
using DualStackAfMismatchTest = ::testing::TestWithParam<ProtocolTestParam>;
|
||||
|
||||
TEST_P(DualStackAfMismatchTest, V6ListenerV4Connect) {
|
||||
ProtocolTestParam const& param = GetParam();
|
||||
const FileDescriptor socket_fd =
|
||||
ASSERT_NO_ERRNO_AND_VALUE(Socket(AF_INET6, param.type, 0));
|
||||
|
||||
const TestAddress& v6_addr = V6Loopback();
|
||||
const TestAddress& v4_addr = V4MappedLoopback();
|
||||
ASSERT_THAT(
|
||||
bind(socket_fd.get(), AsSockAddr(&v6_addr.addr), v6_addr.addr_len),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(
|
||||
connect(socket_fd.get(), AsSockAddr(&v4_addr.addr), v4_addr.addr_len),
|
||||
SyscallFailsWithErrno(ENETUNREACH));
|
||||
}
|
||||
|
||||
TEST_P(DualStackAfMismatchTest, V4ListenerV6Connect) {
|
||||
// Gvisor does not return the correct Errno.
|
||||
SKIP_IF(IsRunningOnGvisor());
|
||||
const FileDescriptor socket_fd =
|
||||
ASSERT_NO_ERRNO_AND_VALUE(Socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP));
|
||||
|
||||
const TestAddress& v6_addr = V6Loopback();
|
||||
const TestAddress& v4_addr = V4MappedLoopback();
|
||||
ASSERT_THAT(
|
||||
bind(socket_fd.get(), AsSockAddr(&v4_addr.addr), v4_addr.addr_len),
|
||||
SyscallSucceeds());
|
||||
ASSERT_THAT(
|
||||
connect(socket_fd.get(), AsSockAddr(&v6_addr.addr), v6_addr.addr_len),
|
||||
SyscallFailsWithErrno(EAFNOSUPPORT));
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(All, DualStackAfMismatchTest, ProtocolTestValues(),
|
||||
DescribeProtocolTestParam);
|
||||
|
||||
void tcpSimpleConnectTest(TestAddress const& listener,
|
||||
TestAddress const& connector, bool unbound) {
|
||||
// Create the listening socket.
|
||||
|
||||
Reference in New Issue
Block a user