Mercurial > illumos > illumos-gate
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);