changeset 5003:f49653b680c6

6542435 Fix for 6505607 didn't take into account SO_ALLZONES
author rk129064
date Thu, 06 Sep 2007 01:58:23 -0700
parents 0bbdb60e9732
children ed80345a3522
files usr/src/uts/common/inet/tcp/tcp.c usr/src/uts/common/inet/udp/udp.c
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/inet/tcp/tcp.c	Wed Sep 05 19:25:24 2007 -0700
+++ b/usr/src/uts/common/inet/tcp/tcp.c	Thu Sep 06 01:58:23 2007 -0700
@@ -3557,7 +3557,9 @@
 			 * privilege as being in all zones, as there's
 			 * otherwise no way to identify the right receiver.
 			 */
-			if (!IPCL_ZONE_MATCH(ltcp->tcp_connp, zoneid) &&
+			if (!(IPCL_ZONE_MATCH(ltcp->tcp_connp, zoneid) ||
+			    IPCL_ZONE_MATCH(connp,
+			    ltcp->tcp_connp->conn_zoneid)) &&
 			    !lconnp->conn_mac_exempt &&
 			    !connp->conn_mac_exempt)
 				continue;
--- a/usr/src/uts/common/inet/udp/udp.c	Wed Sep 05 19:25:24 2007 -0700
+++ b/usr/src/uts/common/inet/udp/udp.c	Thu Sep 06 01:58:23 2007 -0700
@@ -1281,7 +1281,9 @@
 			 * privilege as being in all zones, as there's
 			 * otherwise no way to identify the right receiver.
 			 */
-			if (zoneid != udp1->udp_connp->conn_zoneid &&
+			if (!(IPCL_ZONE_MATCH(udp1->udp_connp, zoneid) ||
+			    IPCL_ZONE_MATCH(connp,
+			    udp1->udp_connp->conn_zoneid)) &&
 			    !udp->udp_mac_exempt && !udp1->udp_mac_exempt)
 				continue;
 
@@ -1804,7 +1806,10 @@
 		    dstport != udp1->udp_dstport ||
 		    !IN6_ARE_ADDR_EQUAL(&udp->udp_v6src, &udp1->udp_v6src) ||
 		    !IN6_ARE_ADDR_EQUAL(&v6dst, &udp1->udp_v6dst) ||
-		    udp->udp_connp->conn_zoneid != udp1->udp_connp->conn_zoneid)
+		    !(IPCL_ZONE_MATCH(udp->udp_connp,
+		    udp1->udp_connp->conn_zoneid) ||
+		    IPCL_ZONE_MATCH(udp1->udp_connp,
+		    udp->udp_connp->conn_zoneid)))
 			continue;
 		mutex_exit(&udpf->uf_lock);
 		udp_err_ack(q, mp, TBADADDR, 0);