Page MenuHomeFreeBSD

tcp: don't allow to connect a TCP/IPv6 endpoint in TIME WAIT state
ClosedPublic

Authored by tuexen on Jul 2 2025, 10:51 AM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, Aug 19, 12:34 AM
Unknown Object (File)
Mon, Aug 11, 11:31 AM
Unknown Object (File)
Fri, Aug 8, 4:53 PM
Unknown Object (File)
Fri, Aug 8, 4:23 AM
Unknown Object (File)
Thu, Aug 7, 10:38 AM
Unknown Object (File)
Tue, Aug 5, 5:30 PM
Unknown Object (File)
Tue, Aug 5, 1:06 PM
Unknown Object (File)
Tue, Jul 29, 5:38 AM
Subscribers

Details

Summary

This ensures the TCP/IPv4 and TCP/IPv6 behave the same.

Reported by: syzbot+4de353ba85dac4dcb1ab@syzkaller.appspotmail.com

Test Plan

Ensure the following program does not result in a panic:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>

int
main(void)
{
	struct sockaddr_in6 addr;
	int fd;

	fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
	memset(&addr, 0, sizeof(struct sockaddr_in6));
	addr.sin6_family = AF_INET6;
	addr.sin6_len = sizeof(struct sockaddr_in6);
	addr.sin6_port = htons(1234);
	addr.sin6_addr = in6addr_loopback;
	bind(fd, (struct sockaddr *)&addr, (socklen_t)sizeof(struct sockaddr_in6));
	connect(fd, (struct sockaddr *)&addr, (socklen_t)sizeof(struct sockaddr_in6));
	shutdown(fd, SHUT_WR);
	sleep(1);
	connect(fd, (struct sockaddr *)&addr, (socklen_t)sizeof(struct sockaddr_in6));
	close(fd);
	return (0);
}

This assumes that

sysctl net.inet.tcp.msl_local=60000

has been executed.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

tuexen retitled this revision from tcp: don't allow to connect and TCP/IPv6 endpoint in TIME WAIT state to tcp: don't allow to connect a TCP/IPv6 endpoint in TIME WAIT state.
This revision is now accepted and ready to land.Jul 7 2025, 2:45 PM

Other than the fd is not used in the test code, I am good with this change.

In D51125#1168702, @cc wrote:

Other than the fd is not used in the test code, I am good with this change.

Now I see it. I fixed the test program.