diff options
author | Venugopal Iyer <Venu.Iyer@Sun.COM> | 2009-05-22 15:13:04 -0700 |
---|---|---|
committer | Venugopal Iyer <Venu.Iyer@Sun.COM> | 2009-05-22 15:13:04 -0700 |
commit | d0e58000d0a6f9430e65106daa5fa912eb8f4473 (patch) | |
tree | 4f081230042e61d75a04ad482bed9c3426ebdf5f | |
parent | 8315c5be243dbb5d2daa15cc2475e22de71d16d9 (diff) | |
download | illumos-gate-d0e58000d0a6f9430e65106daa5fa912eb8f4473.tar.gz |
6763980 Assert: sipif->sctp_ipif_state != 2, file: ../../common/inet/sctp/sctp _addr.c, line: 948
-rw-r--r-- | usr/src/uts/common/inet/sctp/sctp_addr.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/usr/src/uts/common/inet/sctp/sctp_addr.c b/usr/src/uts/common/inet/sctp/sctp_addr.c index 7bc6635999..b347d30dda 100644 --- a/usr/src/uts/common/inet/sctp/sctp_addr.c +++ b/usr/src/uts/common/inet/sctp/sctp_addr.c @@ -923,7 +923,9 @@ sctp_update_saddrs(sctp_ipif_t *oipif, sctp_ipif_t *nipif, int idx, * Given an ipif, walk the hash list in the global ipif table and for * any other SCTP ipif with the same address and non-zero reference, walk * the SCTP list and update the saddr list, if required, to point to the - * new SCTP ipif. + * new SCTP ipif. If it is a loopback interface, then there could be + * multiple interfaces with 127.0.0.1 if there are zones configured, so + * check the zoneid in addition to the address. */ void sctp_chk_and_updt_saddr(int hindex, sctp_ipif_t *ipif, sctp_stack_t *sctps) @@ -939,7 +941,9 @@ sctp_chk_and_updt_saddr(int hindex, sctp_ipif_t *ipif, sctp_stack_t *sctps) rw_enter(&sipif->sctp_ipif_lock, RW_WRITER); if (sipif->sctp_ipif_id != ipif->sctp_ipif_id && IN6_ARE_ADDR_EQUAL(&sipif->sctp_ipif_saddr, - &ipif->sctp_ipif_saddr) && sipif->sctp_ipif_refcnt > 0) { + &ipif->sctp_ipif_saddr) && sipif->sctp_ipif_refcnt > 0 && + (!SCTP_IS_IPIF_LOOPBACK(ipif) || ipif->sctp_ipif_zoneid == + sipif->sctp_ipif_zoneid)) { /* * There can only be one address up at any time * and we are here because ipif has been brought |