so as discussed recently having the inet6 link-local addrs on every
interface by default is stupid and a security risk.

this diff fixes that. well, really two independent parts.
one: set the NOINET6 flag by default on each and every interface.
two: implement "ifconfig <if> +inet6" to turn inet6 on and assign
the link-local addr.

this should be transparent for almost all real use cases of inet6
since assigning any inet6 address also resets the flag (and ll is
assigned then as well).
lo0 still gets it's ::1 and fe80::1%lo0 by default.

the only use case that needs config adoption: people ONLY using
link-local, they will need to put +inet6 in the corresponding
hostname.if file.

ok?

Index: sys/net/if.c
===================================================================
RCS file: /cvs/src/sys/net/if.c,v
retrieving revision 1.288
diff -u -p -r1.288 if.c
--- sys/net/if.c        13 May 2014 14:33:25 -0000      1.288
+++ sys/net/if.c        14 May 2014 21:03:45 -0000
@@ -429,6 +429,9 @@ if_attach(struct ifnet *ifp)
 #else
        TAILQ_INSERT_TAIL(&ifnet, ifp, if_list);
 #endif
+#ifdef INET6
+       ifp->if_xflags |= IFXF_NOINET6;
+#endif
 
        m_clinitifp(ifp);
 
Index: sbin/ifconfig/ifconfig.8
===================================================================
RCS file: /cvs/src/sbin/ifconfig/ifconfig.8,v
retrieving revision 1.241
diff -u -p -r1.241 ifconfig.8
--- sbin/ifconfig/ifconfig.8    22 Apr 2014 10:11:32 -0000      1.241
+++ sbin/ifconfig/ifconfig.8    13 May 2014 14:58:58 -0000
@@ -283,8 +283,12 @@ Disable
 on the given interface and remove all configured
 .Xr inet6 4
 addresses, including the link-local ones.
-To turn it on again, assign any inet6 address or run
+To turn it on again, use +inet6, assign any inet6 address or run
 .Xr rtsol 8 .
+.It +inet6
+Enable
+.Xr inet6 4
+and assign a link local address if the interface doesn't have one yet.
 .It Cm instance Ar minst
 Set the media instance to
 .Ar minst .
Index: sbin/ifconfig/ifconfig.c
===================================================================
RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
retrieving revision 1.283
diff -u -p -r1.283 ifconfig.c
--- sbin/ifconfig/ifconfig.c    12 May 2014 08:47:37 -0000      1.283
+++ sbin/ifconfig/ifconfig.c    13 May 2014 14:56:25 -0000
@@ -412,6 +412,7 @@ const struct        cmd {
        { "-flowdst", 1,                0,              unsetpflow_receiver },
        { "pflowproto", NEXTARG,        0,              setpflowproto },
        { "-inet6",     IFXF_NOINET6,   0,              setifxflags } ,
+       { "+inet6",     0,              0,              setia6eui64 },
        { "keepalive",  NEXTARG2,       0,              NULL, setkeepalive },
        { "-keepalive", 1,              0,              unsetkeepalive },
        { "add",        NEXTARG,        0,              bridge_add },
@@ -1310,7 +1311,9 @@ setia6eui64(const char *cmd, int val)
        const struct in6_addr *lladdr = NULL;
        struct in6_addr *in6;
 
-       if (afp->af_af != AF_INET6)
+       if (!strcmp(cmd, "+inet6"))
+               setifxflags("inet6", -IFXF_NOINET6);
+       else if (afp->af_af != AF_INET6)
                errx(1, "%s not allowed for the AF", cmd);
        in6 = (struct in6_addr *)&in6_addreq.ifra_addr.sin6_addr;
        if (memcmp(&in6addr_any.s6_addr[8], &in6->s6_addr[8], 8) != 0)



-- 
Henning Brauer, h...@bsws.de, henn...@openbsd.org
BS Web Services GmbH, http://bsws.de, Full-Service ISP
Secure Hosting, Mail and DNS. Virtual & Dedicated Servers, Root to Fully Managed
Henning Brauer Consulting, http://henningbrauer.com/

Reply via email to