diff --git a/pkg/sentry/socket/netstack/netstack.go b/pkg/sentry/socket/netstack/netstack.go index f2f97b99c..3137a45f4 100644 --- a/pkg/sentry/socket/netstack/netstack.go +++ b/pkg/sentry/socket/netstack/netstack.go @@ -2625,6 +2625,8 @@ func setSockOptIP(t *kernel.Task, s socket.Socket, ep commonEndpoint, name int, v = int32(tcpip.PMTUDiscoveryDo) case linux.IP_PMTUDISC_PROBE: v = int32(tcpip.PMTUDiscoveryProbe) + case linux.IP_PMTUDISC_INTERFACE, linux.IP_PMTUDISC_OMIT: + return nil // Noop. default: return syserr.ErrNotSupported } diff --git a/test/syscalls/linux/tcp_socket.cc b/test/syscalls/linux/tcp_socket.cc index d48b8b4e8..aa65e7c30 100644 --- a/test/syscalls/linux/tcp_socket.cc +++ b/test/syscalls/linux/tcp_socket.cc @@ -2755,6 +2755,20 @@ TEST_P(SimpleTcpSocketTest, SetTCPCorkOff) { } #endif // __linux__ +TEST_P(SimpleTcpSocketTest, SetUnsupportedPMTUDISC) { + int fd; + ASSERT_THAT(fd = socket(GetParam(), SOCK_STREAM, IPPROTO_TCP), + SyscallSucceeds()); + + int set = IP_PMTUDISC_INTERFACE; + socklen_t length = sizeof(set); + EXPECT_THAT(setsockopt(fd, IPPROTO_IP, IP_MTU_DISCOVER, &set, length), + SyscallSucceeds()); + set = IP_PMTUDISC_OMIT; + EXPECT_THAT(setsockopt(fd, IPPROTO_IP, IP_MTU_DISCOVER, &set, length), + SyscallSucceeds()); +} + INSTANTIATE_TEST_SUITE_P(AllInetTests, SimpleTcpSocketTest, ::testing::Values(AF_INET, AF_INET6));