6935171 in.ndpd/in.mpathd stuck unkillably in close() due to conn_ref leak
6935243 IPv6 ND probes are not sent out due to IXAF_VERIFY_SOURCE setting.
--- a/usr/src/uts/common/inet/ip/ip_if.c Tue Mar 23 12:32:20 2010 -0700
+++ b/usr/src/uts/common/inet/ip/ip_if.c Tue Mar 23 16:21:48 2010 -0400
@@ -971,6 +971,7 @@
tmp_list = curr->b_next;
curr->b_next = NULL;
curr->b_prev = NULL;
+ wq = curr->b_queue;
curr->b_queue = NULL;
if (DB_TYPE(curr) == M_IOCTL || DB_TYPE(curr) == M_IOCDATA) {
DTRACE_PROBE4(ipif__ioctl,
@@ -12951,7 +12952,7 @@
ixas.ixa_flags = IXAF_BASIC_SIMPLE_V4;
ixas.ixa_flags &= ~IXAF_SET_ULP_CKSUM;
}
-
+ ixas.ixa_flags &= ~IXAF_VERIFY_SOURCE;
ixas.ixa_flags |= IXAF_MULTICAST_LOOP | IXAF_SET_SOURCE;
(void) ip_output_simple(mp, &ixas);
ixa_cleanup(&ixas);
@@ -13566,7 +13567,6 @@
bzero(&ixas, sizeof (ixas));
ixas.ixa_flags = IXAF_BASIC_SIMPLE_V4;
- ixas.ixa_flags |= IXAF_SET_SOURCE;
ixas.ixa_zoneid = ALL_ZONES;
ixas.ixa_ifindex = 0;
ixas.ixa_ipst = ipst;
--- a/usr/src/uts/common/inet/ip/ip_ndp.c Tue Mar 23 12:32:20 2010 -0700
+++ b/usr/src/uts/common/inet/ip/ip_ndp.c Tue Mar 23 16:21:48 2010 -0400
@@ -2192,7 +2192,7 @@
mp->b_wptr = mp->b_rptr + len;
bzero(&ixas, sizeof (ixas));
- ixas.ixa_flags = IXAF_BASIC_SIMPLE_V6 | IXAF_NO_HW_CKSUM;
+ ixas.ixa_flags = IXAF_SET_ULP_CKSUM | IXAF_NO_HW_CKSUM;
ixas.ixa_ifindex = ill->ill_phyint->phyint_ifindex;
ixas.ixa_ipst = ipst;
--- a/usr/src/uts/common/inet/ip/ip_netinfo.c Tue Mar 23 12:32:20 2010 -0700
+++ b/usr/src/uts/common/inet/ip/ip_netinfo.c Tue Mar 23 16:21:48 2010 -0400
@@ -1509,6 +1509,7 @@
} else {
ixas.ixa_flags = IXAF_BASIC_SIMPLE_V4;
}
+ ixas.ixa_flags &= ~IXAF_VERIFY_SOURCE;
(void) ip_output_simple(packet->ni_packet, &ixas);
ixa_cleanup(&ixas);
}
--- a/usr/src/uts/common/inet/iptun/iptun.c Tue Mar 23 12:32:20 2010 -0700
+++ b/usr/src/uts/common/inet/iptun/iptun.c Tue Mar 23 16:21:48 2010 -0400
@@ -2115,8 +2115,10 @@
bzero(&ixas, sizeof (ixas));
ixas.ixa_flags = IXAF_BASIC_SIMPLE_V4;
- if (new_ipha->ipha_src == INADDR_ANY)
+ if (new_ipha->ipha_src == INADDR_ANY) {
+ ixas.ixa_flags &= ~IXAF_VERIFY_SOURCE;
ixas.ixa_flags |= IXAF_SET_SOURCE;
+ }
ixas.ixa_zoneid = IPCL_ZONEID(connp);
ixas.ixa_ipst = connp->conn_netstack->netstack_ip;
@@ -2166,8 +2168,10 @@
bzero(&ixas, sizeof (ixas));
ixas.ixa_flags = IXAF_BASIC_SIMPLE_V6;
- if (IN6_IS_ADDR_UNSPECIFIED(&new_ip6h->ip6_src))
+ if (IN6_IS_ADDR_UNSPECIFIED(&new_ip6h->ip6_src)) {
+ ixas.ixa_flags &= ~IXAF_VERIFY_SOURCE;
ixas.ixa_flags |= IXAF_SET_SOURCE;
+ }
ixas.ixa_zoneid = IPCL_ZONEID(connp);
ixas.ixa_ipst = connp->conn_netstack->netstack_ip;