Print this page
4838 Fix for 4596 has some inverted booleans
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>


3446         } else if (sin6 != NULL) {
3447                 boolean_t v4mapped;
3448                 uint_t srcid;
3449 
3450                 v6dst = sin6->sin6_addr;
3451                 dstport = sin6->sin6_port;
3452                 flowinfo = sin6->sin6_flowinfo;
3453                 srcid = sin6->__sin6_src_id;
3454                 if (IN6_IS_ADDR_LINKSCOPE(&v6dst) && sin6->sin6_scope_id != 0) {
3455                         ixa->ixa_scopeid = sin6->sin6_scope_id;
3456                         ixa->ixa_flags |= IXAF_SCOPEID_SET;
3457                 } else {
3458                         ixa->ixa_flags &= ~IXAF_SCOPEID_SET;
3459                 }
3460                 v4mapped = IN6_IS_ADDR_V4MAPPED(&v6dst);
3461                 if (v4mapped)
3462                         ixa->ixa_flags |= IXAF_IS_IPV4;
3463                 else
3464                         ixa->ixa_flags &= ~IXAF_IS_IPV4;
3465                 if (srcid != 0 && IN6_IS_ADDR_UNSPECIFIED(&v6src)) {
3466                         if (ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp),
3467                             v4mapped, connp->conn_netstack)) {
3468                                 /* Mismatched v4mapped/v6 specified by srcid. */
3469                                 mutex_exit(&connp->conn_lock);
3470                                 error = EADDRNOTAVAIL;
3471                                 goto failed;    /* Does freemsg() and mib. */
3472                         }
3473                 }
3474         } else {
3475                 /* Connected case */
3476                 v6dst = connp->conn_faddr_v6;
3477                 flowinfo = connp->conn_flowinfo;
3478         }
3479         mutex_exit(&connp->conn_lock);
3480         /* Handle IP_PKTINFO/IPV6_PKTINFO setting source address. */
3481         if (ipp->ipp_fields & IPPF_ADDR) {
3482                 if (ixa->ixa_flags & IXAF_IS_IPV4) {
3483                         if (IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr))
3484                                 v6src = ipp->ipp_addr;
3485                 } else {
3486                         if (!IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr))


4438                 ixa->ixa_flags |= IXAF_IS_IPV4;
4439         } else {
4440                 boolean_t v4mapped;
4441 
4442                 v6dst = sin6->sin6_addr;
4443                 dstport = sin6->sin6_port;
4444                 flowinfo = sin6->sin6_flowinfo;
4445                 srcid = sin6->__sin6_src_id;
4446                 if (IN6_IS_ADDR_LINKSCOPE(&v6dst) && sin6->sin6_scope_id != 0) {
4447                         ixa->ixa_scopeid = sin6->sin6_scope_id;
4448                         ixa->ixa_flags |= IXAF_SCOPEID_SET;
4449                 } else {
4450                         ixa->ixa_flags &= ~IXAF_SCOPEID_SET;
4451                 }
4452                 v4mapped = IN6_IS_ADDR_V4MAPPED(&v6dst);
4453                 if (v4mapped)
4454                         ixa->ixa_flags |= IXAF_IS_IPV4;
4455                 else
4456                         ixa->ixa_flags &= ~IXAF_IS_IPV4;
4457                 if (srcid != 0 && IN6_IS_ADDR_UNSPECIFIED(&v6src)) {
4458                         if (ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp),
4459                             v4mapped, connp->conn_netstack)) {
4460                                 /* Mismatched v4mapped/v6 specified by srcid. */
4461                                 mutex_exit(&connp->conn_lock);
4462                                 error = EADDRNOTAVAIL;
4463                                 goto ud_error;
4464                         }
4465                 }
4466         }
4467         /* Handle IP_PKTINFO/IPV6_PKTINFO setting source address. */
4468         if (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR) {
4469                 ip_pkt_t *ipp = &connp->conn_xmit_ipp;
4470 
4471                 if (ixa->ixa_flags & IXAF_IS_IPV4) {
4472                         if (IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr))
4473                                 v6src = ipp->ipp_addr;
4474                 } else {
4475                         if (!IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr))
4476                                 v6src = ipp->ipp_addr;
4477                 }
4478         }




3446         } else if (sin6 != NULL) {
3447                 boolean_t v4mapped;
3448                 uint_t srcid;
3449 
3450                 v6dst = sin6->sin6_addr;
3451                 dstport = sin6->sin6_port;
3452                 flowinfo = sin6->sin6_flowinfo;
3453                 srcid = sin6->__sin6_src_id;
3454                 if (IN6_IS_ADDR_LINKSCOPE(&v6dst) && sin6->sin6_scope_id != 0) {
3455                         ixa->ixa_scopeid = sin6->sin6_scope_id;
3456                         ixa->ixa_flags |= IXAF_SCOPEID_SET;
3457                 } else {
3458                         ixa->ixa_flags &= ~IXAF_SCOPEID_SET;
3459                 }
3460                 v4mapped = IN6_IS_ADDR_V4MAPPED(&v6dst);
3461                 if (v4mapped)
3462                         ixa->ixa_flags |= IXAF_IS_IPV4;
3463                 else
3464                         ixa->ixa_flags &= ~IXAF_IS_IPV4;
3465                 if (srcid != 0 && IN6_IS_ADDR_UNSPECIFIED(&v6src)) {
3466                         if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp),
3467                             v4mapped, connp->conn_netstack)) {
3468                                 /* Mismatched v4mapped/v6 specified by srcid. */
3469                                 mutex_exit(&connp->conn_lock);
3470                                 error = EADDRNOTAVAIL;
3471                                 goto failed;    /* Does freemsg() and mib. */
3472                         }
3473                 }
3474         } else {
3475                 /* Connected case */
3476                 v6dst = connp->conn_faddr_v6;
3477                 flowinfo = connp->conn_flowinfo;
3478         }
3479         mutex_exit(&connp->conn_lock);
3480         /* Handle IP_PKTINFO/IPV6_PKTINFO setting source address. */
3481         if (ipp->ipp_fields & IPPF_ADDR) {
3482                 if (ixa->ixa_flags & IXAF_IS_IPV4) {
3483                         if (IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr))
3484                                 v6src = ipp->ipp_addr;
3485                 } else {
3486                         if (!IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr))


4438                 ixa->ixa_flags |= IXAF_IS_IPV4;
4439         } else {
4440                 boolean_t v4mapped;
4441 
4442                 v6dst = sin6->sin6_addr;
4443                 dstport = sin6->sin6_port;
4444                 flowinfo = sin6->sin6_flowinfo;
4445                 srcid = sin6->__sin6_src_id;
4446                 if (IN6_IS_ADDR_LINKSCOPE(&v6dst) && sin6->sin6_scope_id != 0) {
4447                         ixa->ixa_scopeid = sin6->sin6_scope_id;
4448                         ixa->ixa_flags |= IXAF_SCOPEID_SET;
4449                 } else {
4450                         ixa->ixa_flags &= ~IXAF_SCOPEID_SET;
4451                 }
4452                 v4mapped = IN6_IS_ADDR_V4MAPPED(&v6dst);
4453                 if (v4mapped)
4454                         ixa->ixa_flags |= IXAF_IS_IPV4;
4455                 else
4456                         ixa->ixa_flags &= ~IXAF_IS_IPV4;
4457                 if (srcid != 0 && IN6_IS_ADDR_UNSPECIFIED(&v6src)) {
4458                         if (!ip_srcid_find_id(srcid, &v6src, IPCL_ZONEID(connp),
4459                             v4mapped, connp->conn_netstack)) {
4460                                 /* Mismatched v4mapped/v6 specified by srcid. */
4461                                 mutex_exit(&connp->conn_lock);
4462                                 error = EADDRNOTAVAIL;
4463                                 goto ud_error;
4464                         }
4465                 }
4466         }
4467         /* Handle IP_PKTINFO/IPV6_PKTINFO setting source address. */
4468         if (connp->conn_xmit_ipp.ipp_fields & IPPF_ADDR) {
4469                 ip_pkt_t *ipp = &connp->conn_xmit_ipp;
4470 
4471                 if (ixa->ixa_flags & IXAF_IS_IPV4) {
4472                         if (IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr))
4473                                 v6src = ipp->ipp_addr;
4474                 } else {
4475                         if (!IN6_IS_ADDR_V4MAPPED(&ipp->ipp_addr))
4476                                 v6src = ipp->ipp_addr;
4477                 }
4478         }