Date: Fri, 28 May 2021 18:43:02 -0400 From: Mark Johnston <markj@freebsd.org> To: Bakul Shah <bakul@iitbombay.org> Cc: freebsd-net@freebsd.org Subject: Re: bind(2) fails on 13.0-STABLE when sin_family is 0 Message-ID: <YLFx9jBWyD2OaJgD@nuc> In-Reply-To: <9CF9F43D-CEB5-4856-AC1E-455DFE66DC69@iitbombay.org> References: <D9E4EE46-E813-44F4-8BC2-971E1439A68D@iitbombay.org> <YLFq2FuJVzcgpMc%2B@nuc> <9CF9F43D-CEB5-4856-AC1E-455DFE66DC69@iitbombay.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, May 28, 2021 at 03:21:15PM -0700, Bakul Shah wrote:
> On May 28, 2021, at 3:12 PM, Mark Johnston <markj@freebsd.org> wrote:
> >
> > On Fri, May 28, 2021 at 02:40:26PM -0700, Bakul Shah wrote:
> >> ttcp runs fine on 13.0-RELEASE but fails on -stable.
> >>
> >> The culprit seems to be bind(2). Running ttcp under gdb:
> >>
> >> $ gdb a.out
> >> Reading symbols from a.out...
> >> (gdb) b 295
> >> Breakpoint 1 at 0x203127: file ttcp.c, line 295.
> >> (gdb) run -s -r
> >> Starting program: /usr/ports/benchmarks/ttcp/work/ttcp-1.12_2/a.out -s -r
> >> ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp
> >> ttcp-r: socket
> >>
> >> Breakpoint 1, main (argc=3, argv=0x7fffffffd9b0) at ttcp.c:295
> >> 295 if (bind(fd, (struct sockaddr *) &sinme, sizeof(sinme)) < 0)
> >> (gdb) p/x sinme
> >> $1 = {sin_len = 0x0, sin_family = 0x0, sin_port = 0x8913, sin_addr = {
> >> s_addr = 0x0}, sin_zero = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
> >> (gdb) n
> >> 296 err("bind");
> >> (gdb) p errno
> >> $2 = 47
> >>
> >>
> >> $ errno 47
> >> #define EAFNOSUPPORT 47 /* Address family not supported by protocol family */
> >>
> >> Did something change post 13.0-RELEASE that requires specifying sin_family?
> >> Thanks!
> >
> > Yes, some changes were made recently to make sockaddr validation
> > stricter. Several other operating systems also have this requirement.
> > Linux seems to be a bit more relaxed in that AF_UNSPEC (0) is permitted
> > if and only if the bind address is INADDR_ANY, which is the case here.
> >
> > Since 2001 the benchmarks/ttcp port has carried a patch to specify
> > sin_family. Is there some reason it cannot be used here? I don't
> > object to re-allowing ttcp's unpatched behaviour if necessary.
>
> The patch was only for the transmit case. Making it unconditional fixed it.
> I asked mainly because I was surprised and wanted to make sure this was an
> intended change.
>
> Thanks for your response!
I see, thanks. In that case it is probably best to restore some level
of compatibility: https://reviews.freebsd.org/D30539
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?YLFx9jBWyD2OaJgD>
