Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Jun 2024 16:30:32 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 279881] socket support for IPv4-mapped IPv6 misbehave
Message-ID:  <bug-279881-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D279881

            Bug ID: 279881
           Summary: socket support for IPv4-mapped IPv6 misbehave
           Product: Base System
           Version: 14.1-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: kern
          Assignee: bugs@FreeBSD.org
          Reporter: zonyitoo@gmail.com

When using IPv4-mapped IPv6 address with socket, no matter sysctl
net.inet6.ip6.v6only was set to 0 or 1, operations will always success.

Here is a test program in Python:

import socket
s =3D socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, 0)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
s.connect(('::ffff:169.254.1.1', 53))
print(s.getsockname())

1. No matter net.inet6.ip6.v6only was set to 0 or 1, the program above will
always run without any errors.

2. No matter net.inet6.ip6.v6only was set to 0 or 1, delete the call
setsockopt(IPV6_V6ONLY) will always run without any errors. (UNEXPECTED)

3. If changed the set(IPV6_V6ONLY) line to 1, then the connect() call will =
fail
with an EINVAL error. (EXPECTED)

Based on my experience on Linux, if sockopt IPV6_V6ONLY was not set explici=
tly,
it should derived from the system's global configuration, in FreeBSD it sho=
uld
be net.inet6.ip6.v6only.

Here is another problem, which I think it should be a special design in
FreeBSD:

If net.inet6.ip6.v6only was set to 1, even the problem like above could run
without error, and then send packets to the target address (IPv4-mapped IPv=
6)
with sendto(), the target socket couldn't receive the packet from recvfrom(=
).

I suspected that it is because net.inet6.ip6.v6only=3D1 disables routing
IPv4-mapped IPv6 to IPv4 target.

Overall, in this issue I want to suggest:

1. sockopt IPV6_V6ONLY default value should derive from net.inet6.ip6.v6only
2. If sockopt IPV6_V6ONLY was set to 0 explicitly, then IPv4-mapped IPv6
packets send from or receive by this socket should be allowed / properly
routed.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-279881-227>