svn commit: r368031 - in head: libexec/rc sys/netinet6
Bjoern A. Zeeb
bz at FreeBSD.org
Wed Nov 25 20:58:02 UTC 2020
Author: bz
Date: Wed Nov 25 20:58:01 2020
New Revision: 368031
URL: https://svnweb.freebsd.org/changeset/base/368031
Log:
IPv6: set ifdisabled in the kernel rather than in rc
Enable ND6_IFF_IFDISABLED when the interface is created in the
kernel before return to user space.
This avoids a race when an interface is create by a program which
also calls ifconfig IF inet6 -ifdisabled and races with the
devd -> /etc/pccard_ether -> .. netif start IF -> ifdisabled
calls (the devd/rc framework disabling IPv6 again after the program
had enabled it already).
In case the global net.inet6.ip6.accept_rtadv was turned on,
we also default to enabling IPv6 on the interfaces, rather than
disabling them.
PR: 248172
Reported by: Gert Doering (gert greenie.muc.de)
Reviewed by: glebius (, phk)
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D27324
Modified:
head/libexec/rc/network.subr
head/sys/netinet6/nd6.c
Modified: head/libexec/rc/network.subr
==============================================================================
--- head/libexec/rc/network.subr Wed Nov 25 20:05:05 2020 (r368030)
+++ head/libexec/rc/network.subr Wed Nov 25 20:58:01 2020 (r368031)
@@ -134,8 +134,6 @@ ifconfig_up()
if ! noafif $1 && afexists inet6; then
if checkyesno ipv6_activate_all_interfaces; then
_ipv6_opts="-ifdisabled"
- elif [ "$1" != "lo0" ]; then
- _ipv6_opts="ifdisabled"
fi
# backward compatibility: $ipv6_enable
Modified: head/sys/netinet6/nd6.c
==============================================================================
--- head/sys/netinet6/nd6.c Wed Nov 25 20:05:05 2020 (r368030)
+++ head/sys/netinet6/nd6.c Wed Nov 25 20:58:01 2020 (r368031)
@@ -273,6 +273,10 @@ nd6_ifattach(struct ifnet *ifp)
nd->flags = ND6_IFF_PERFORMNUD;
+ /* Set IPv6 disabled on all interfaces but loopback by default. */
+ if ((ifp->if_flags & IFF_LOOPBACK) == 0)
+ nd->flags |= ND6_IFF_IFDISABLED;
+
/* A loopback interface always has ND6_IFF_AUTO_LINKLOCAL.
* XXXHRS: Clear ND6_IFF_AUTO_LINKLOCAL on an IFT_BRIDGE interface by
* default regardless of the V_ip6_auto_linklocal configuration to
@@ -290,8 +294,11 @@ nd6_ifattach(struct ifnet *ifp)
*/
if (V_ip6_accept_rtadv &&
!(ifp->if_flags & IFF_LOOPBACK) &&
- (ifp->if_type != IFT_BRIDGE))
+ (ifp->if_type != IFT_BRIDGE)) {
nd->flags |= ND6_IFF_ACCEPT_RTADV;
+ /* If we globally accept rtadv, assume IPv6 on. */
+ nd->flags &= ~ND6_IFF_IFDISABLED;
+ }
if (V_ip6_no_radr && !(ifp->if_flags & IFF_LOOPBACK))
nd->flags |= ND6_IFF_NO_RADR;
More information about the svn-src-all
mailing list