patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
141 lines
4.5 KiB
Diff
141 lines
4.5 KiB
Diff
Index: sys/netinet/ip_output.c
|
|
===================================================================
|
|
RCS file: /home/cvs/src/sys/netinet/ip_output.c,v
|
|
retrieving revision 1.242.2.8
|
|
diff -u -r1.242.2.8 ip_output.c
|
|
--- sys/netinet/ip_output.c 31 Jan 2006 16:06:05 -0000 1.242.2.8
|
|
+++ sys/netinet/ip_output.c 25 Aug 2006 15:07:44 -0000
|
|
@@ -1162,6 +1162,9 @@
|
|
return (EINVAL);
|
|
}
|
|
|
|
+ if (inp == NULL)
|
|
+ return (EINVAL);
|
|
+
|
|
switch (sopt->sopt_dir) {
|
|
case SOPT_SET:
|
|
switch (sopt->sopt_name) {
|
|
Index: sys/netinet6/in6.c
|
|
===================================================================
|
|
RCS file: /home/cvs/src/sys/netinet6/in6.c,v
|
|
retrieving revision 1.51.2.8
|
|
diff -u -r1.51.2.8 in6.c
|
|
--- sys/netinet6/in6.c 9 Mar 2006 11:59:03 -0000 1.51.2.8
|
|
+++ sys/netinet6/in6.c 25 Aug 2006 15:07:56 -0000
|
|
@@ -1720,20 +1720,55 @@
|
|
|
|
/* we could do in(6)_socktrim here, but just omit it at this moment. */
|
|
|
|
+ if (newhost && nd6_need_cache(ifp) != 0) {
|
|
+ /* set the rtrequest function to create llinfo */
|
|
+ ia->ia_ifa.ifa_rtrequest = nd6_rtrequest;
|
|
+ }
|
|
+
|
|
/*
|
|
* Special case:
|
|
* If a new destination address is specified for a point-to-point
|
|
* interface, install a route to the destination as an interface
|
|
- * direct route.
|
|
+ * direct route. In addition, if the link is expected to have neighbor
|
|
+ * cache entries, specify RTF_LLINFO so that a cache entry for the
|
|
+ * destination address will be created.
|
|
+ * created
|
|
* XXX: the logic below rejects assigning multiple addresses on a p2p
|
|
- * interface that share a same destination.
|
|
+ * interface that share the same destination.
|
|
*/
|
|
plen = in6_mask2len(&ia->ia_prefixmask.sin6_addr, NULL); /* XXX */
|
|
if (!(ia->ia_flags & IFA_ROUTE) && plen == 128 &&
|
|
ia->ia_dstaddr.sin6_family == AF_INET6) {
|
|
- if ((error = rtinit(&(ia->ia_ifa), (int)RTM_ADD,
|
|
- RTF_UP | RTF_HOST)) != 0)
|
|
+ int rtflags = RTF_UP | RTF_HOST;
|
|
+ struct rtentry *rt = NULL, **rtp = NULL;
|
|
+
|
|
+ if (nd6_need_cache(ifp) != 0) {
|
|
+ rtflags |= RTF_LLINFO;
|
|
+ rtp = &rt;
|
|
+ }
|
|
+
|
|
+ error = rtrequest(RTM_ADD, (struct sockaddr *)&ia->ia_dstaddr,
|
|
+ (struct sockaddr *)&ia->ia_addr,
|
|
+ (struct sockaddr *)&ia->ia_prefixmask,
|
|
+ ia->ia_flags | rtflags, rtp);
|
|
+ if (error != 0)
|
|
return (error);
|
|
+ if (rt != NULL) {
|
|
+ struct llinfo_nd6 *ln;
|
|
+
|
|
+ RT_LOCK(rt);
|
|
+ ln = (struct llinfo_nd6 *)rt->rt_llinfo;
|
|
+ if (ln != NULL) {
|
|
+ /*
|
|
+ * Set the state to STALE because we don't
|
|
+ * have to perform address resolution on this
|
|
+ * link.
|
|
+ */
|
|
+ ln->ln_state = ND6_LLINFO_STALE;
|
|
+ }
|
|
+ RT_REMREF(rt);
|
|
+ RT_UNLOCK(rt);
|
|
+ }
|
|
ia->ia_flags |= IFA_ROUTE;
|
|
}
|
|
if (plen < 128) {
|
|
@@ -1744,11 +1779,8 @@
|
|
}
|
|
|
|
/* Add ownaddr as loopback rtentry, if necessary (ex. on p2p link). */
|
|
- if (newhost) {
|
|
- /* set the rtrequest function to create llinfo */
|
|
- ia->ia_ifa.ifa_rtrequest = nd6_rtrequest;
|
|
+ if (newhost)
|
|
in6_ifaddloop(&(ia->ia_ifa));
|
|
- }
|
|
|
|
return (error);
|
|
}
|
|
Index: sys/netinet6/nd6.c
|
|
===================================================================
|
|
RCS file: /home/cvs/src/sys/netinet6/nd6.c,v
|
|
retrieving revision 1.48.2.12
|
|
diff -u -r1.48.2.12 nd6.c
|
|
--- sys/netinet6/nd6.c 29 Mar 2006 21:05:11 -0000 1.48.2.12
|
|
+++ sys/netinet6/nd6.c 25 Aug 2006 15:08:02 -0000
|
|
@@ -512,6 +512,19 @@
|
|
ln->ln_asked++;
|
|
nd6_llinfo_settimer(ln, (long)ndi->retrans * hz / 1000);
|
|
nd6_ns_output(ifp, dst, dst, ln, 0);
|
|
+ } else if (rt->rt_ifa != NULL &&
|
|
+ rt->rt_ifa->ifa_addr->sa_family == AF_INET6 &&
|
|
+ (((struct in6_ifaddr *)rt->rt_ifa)->ia_flags & IFA_ROUTE)) {
|
|
+ /*
|
|
+ * This is an unreachable neighbor whose address is
|
|
+ * specified as the destination of a p2p interface
|
|
+ * (see in6_ifinit()). We should not free the entry
|
|
+ * since this is sort of a "static" entry generated
|
|
+ * via interface address configuration.
|
|
+ */
|
|
+ ln->ln_asked = 0;
|
|
+ ln->ln_expire = 0; /* make it permanent */
|
|
+ ln->ln_state = ND6_LLINFO_STALE;
|
|
} else {
|
|
(void)nd6_free(rt, 0);
|
|
ln = NULL;
|
|
Index: sys/vm/uma_core.c
|
|
===================================================================
|
|
RCS file: /home/cvs/src/sys/vm/uma_core.c,v
|
|
retrieving revision 1.119.2.15
|
|
diff -u -r1.119.2.15 uma_core.c
|
|
--- sys/vm/uma_core.c 14 Feb 2006 03:37:58 -0000 1.119.2.15
|
|
+++ sys/vm/uma_core.c 25 Aug 2006 15:08:12 -0000
|
|
@@ -2417,8 +2417,7 @@
|
|
* If nothing else caught this, we'll just do an internal free.
|
|
*/
|
|
zfree_internal:
|
|
- uma_zfree_internal(zone, item, udata, SKIP_DTOR, ZFREE_STATFAIL |
|
|
- ZFREE_STATFREE);
|
|
+ uma_zfree_internal(zone, item, udata, SKIP_DTOR, ZFREE_STATFREE);
|
|
|
|
return;
|
|
}
|