Author: tuexen
Date: Thu May  7 02:28:30 2020
New Revision: 360749
URL: https://svnweb.freebsd.org/changeset/base/360749

Log:
  MFC r355172: Ignore assoc IDs on 1-to-1 style SCTP sockets.
  
  Really ignore the SCTP association identifier on 1-to-1 style sockets
  as requiresd by the socket API specification.
  Thanks to Inaki Baz Castillo, who found this bug running the userland
  stack with valgrind and reported the issue in
  https://github.com/sctplab/usrsctp/issues/408

Modified:
  stable/11/sys/netinet/sctp_usrreq.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/netinet/sctp_usrreq.c
==============================================================================
--- stable/11/sys/netinet/sctp_usrreq.c Thu May  7 02:25:58 2020        
(r360748)
+++ stable/11/sys/netinet/sctp_usrreq.c Thu May  7 02:28:30 2020        
(r360749)
@@ -1675,7 +1675,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        if (inp->idata_supported) {
                                                av->assoc_value = 1;
@@ -1705,7 +1706,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = inp->sctp_cmt_on_off;
                                        SCTP_INP_RUNLOCK(inp);
@@ -1731,7 +1733,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = 
inp->sctp_ep.sctp_default_cc_module;
                                        SCTP_INP_RUNLOCK(inp);
@@ -1776,7 +1779,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = 
inp->sctp_ep.sctp_default_ss_module;
                                        SCTP_INP_RUNLOCK(inp);
@@ -1914,7 +1918,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = inp->sctp_context;
                                        SCTP_INP_RUNLOCK(inp);
@@ -1990,7 +1995,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (sack->sack_assoc_id == SCTP_FUTURE_ASSOC)) 
{
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (sack->sack_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        sack->sack_delay = 
TICKS_TO_MSEC(inp->sctp_ep.sctp_timeoutticks[SCTP_TIMER_RECV]);
                                        sack->sack_freq = 
inp->sctp_ep.sctp_sack_freq;
@@ -2037,7 +2043,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = 
inp->sctp_ep.max_burst;
                                        SCTP_INP_RUNLOCK(inp);
@@ -2065,7 +2072,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        if (inp->sctp_flags & 
SCTP_PCB_FLAGS_BOUND_V6) {
                                                ovh = SCTP_MED_OVERHEAD;
@@ -2466,7 +2474,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (paddrp->spp_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (paddrp->spp_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        /* Use endpoint defaults */
                                        SCTP_INP_RLOCK(inp);
                                        paddrp->spp_pathmaxrxt = 
inp->sctp_ep.def_net_failure;
@@ -2694,7 +2703,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (srto->srto_assoc_id == SCTP_FUTURE_ASSOC)) 
{
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (srto->srto_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        srto->srto_initial = 
inp->sctp_ep.initial_rto;
                                        srto->srto_max = 
inp->sctp_ep.sctp_maxrto;
@@ -2750,7 +2760,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (sasoc->sasoc_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (sasoc->sasoc_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        sasoc->sasoc_cookie_life = 
TICKS_TO_MSEC(inp->sctp_ep.def_cookie_life);
                                        sasoc->sasoc_asocmaxrxt = 
inp->sctp_ep.max_send_times;
@@ -2781,7 +2792,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (s_info->sinfo_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (s_info->sinfo_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        memcpy(s_info, &inp->def_send, 
sizeof(inp->def_send));
                                        SCTP_INP_RUNLOCK(inp);
@@ -2901,7 +2913,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (scact->scact_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (scact->scact_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        /* get the endpoint active key */
                                        SCTP_INP_RLOCK(inp);
                                        scact->scact_keynumber = 
inp->sctp_ep.default_keyid;
@@ -2943,7 +2956,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (sac->gauth_assoc_id == SCTP_FUTURE_ASSOC)) 
{
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (sac->gauth_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        /* get off the endpoint */
                                        SCTP_INP_RLOCK(inp);
                                        chklist = 
inp->sctp_ep.local_auth_chunks;
@@ -3061,7 +3075,8 @@ flags_out:
                                } else {
                                        if ((inp->sctp_flags & 
SCTP_PCB_FLAGS_TCPTYPE) ||
                                            (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                           (event->se_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                           ((inp->sctp_flags & 
SCTP_PCB_FLAGS_UDPTYPE) &&
+                                           (event->se_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                                SCTP_INP_RLOCK(inp);
                                                event->se_on = 
sctp_is_feature_on(inp, event_type);
                                                SCTP_INP_RUNLOCK(inp);
@@ -3134,7 +3149,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (info->snd_assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (info->snd_assoc_id == SCTP_FUTURE_ASSOC))) 
{
                                        SCTP_INP_RLOCK(inp);
                                        info->snd_sid = 
inp->def_send.sinfo_stream;
                                        info->snd_flags = 
inp->def_send.sinfo_flags;
@@ -3166,7 +3182,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (info->pr_assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (info->pr_assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        info->pr_policy = 
PR_SCTP_POLICY(inp->def_send.sinfo_flags);
                                        info->pr_value = 
inp->def_send.sinfo_timetolive;
@@ -3277,7 +3294,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (thlds->spt_assoc_id == SCTP_FUTURE_ASSOC)) 
{
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (thlds->spt_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        /* Use endpoint defaults */
                                        SCTP_INP_RLOCK(inp);
                                        thlds->spt_pathmaxrxt = 
inp->sctp_ep.def_net_failure;
@@ -3385,7 +3403,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (encaps->sue_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (encaps->sue_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        encaps->sue_port = inp->sctp_ep.port;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3412,7 +3431,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = inp->ecn_supported;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3439,7 +3459,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = inp->prsctp_supported;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3466,7 +3487,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = inp->auth_supported;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3493,7 +3515,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = inp->asconf_supported;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3520,7 +3543,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = 
inp->reconfig_supported;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3547,7 +3571,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = inp->nrsack_supported;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3574,7 +3599,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = 
inp->pktdrop_supported;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3601,7 +3627,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = 
(uint32_t)inp->local_strreset_support;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3703,7 +3730,8 @@ flags_out:
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        av->assoc_value = inp->max_cwnd;
                                        SCTP_INP_RUNLOCK(inp);
@@ -3892,7 +3920,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (av->assoc_value == 0) {
                                                inp->idata_supported = 0;
@@ -3936,14 +3965,16 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_FUTURE_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->sctp_cmt_on_off = av->assoc_value;
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -3985,14 +4016,16 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_FUTURE_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->sctp_ep.sctp_default_cc_module = 
av->assoc_value;
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4017,7 +4050,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        SCTP_CHECK_AND_CAST(cc_opt, optval, struct 
sctp_cc_option, optsize);
                        SCTP_FIND_STCB(inp, stcb, cc_opt->aid_value.assoc_id);
                        if (stcb == NULL) {
-                               if (cc_opt->aid_value.assoc_id == 
SCTP_CURRENT_ASSOC) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (cc_opt->aid_value.assoc_id == 
SCTP_CURRENT_ASSOC)) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4068,14 +4102,16 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_FUTURE_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->sctp_ep.sctp_default_ss_module = 
av->assoc_value;
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4107,7 +4143,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                }
                                SCTP_TCB_UNLOCK(stcb);
                        } else {
-                               if (av->assoc_id == SCTP_CURRENT_ASSOC) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_CURRENT_ASSOC)) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4148,14 +4185,16 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_FUTURE_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->sctp_context = av->assoc_value;
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4216,8 +4255,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (sack->sack_assoc_id == SCTP_FUTURE_ASSOC) 
||
-                                   (sack->sack_assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((sack->sack_assoc_id == SCTP_FUTURE_ASSOC) 
||
+                                   (sack->sack_assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (sack->sack_delay) {
                                                
inp->sctp_ep.sctp_timeoutticks[SCTP_TIMER_RECV] = 
MSEC_TO_TICKS(sack->sack_delay);
@@ -4227,8 +4267,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                        }
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((sack->sack_assoc_id == SCTP_CURRENT_ASSOC) 
||
-                                   (sack->sack_assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((sack->sack_assoc_id == 
SCTP_CURRENT_ASSOC) ||
+                                   (sack->sack_assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4315,8 +4356,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (sca->sca_assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (sca->sca_assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((sca->sca_assoc_id == SCTP_FUTURE_ASSOC) ||
+                                   (sca->sca_assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        shared_keys = &inp->sctp_ep.shared_keys;
                                        /*
@@ -4350,8 +4392,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                        error = 
sctp_insert_sharedkey(shared_keys, shared_key);
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((sca->sca_assoc_id == SCTP_CURRENT_ASSOC) ||
-                                   (sca->sca_assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((sca->sca_assoc_id == SCTP_CURRENT_ASSOC) 
||
+                                   (sca->sca_assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4462,8 +4505,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (scact->scact_assoc_id == 
SCTP_FUTURE_ASSOC) ||
-                                   (scact->scact_assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((scact->scact_assoc_id == 
SCTP_FUTURE_ASSOC) ||
+                                   (scact->scact_assoc_id == 
SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (sctp_auth_setactivekey_ep(inp, 
scact->scact_keynumber)) {
                                                SCTP_LTRACE_ERR_RET(inp, NULL, 
NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
@@ -4471,8 +4515,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                        }
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((scact->scact_assoc_id == 
SCTP_CURRENT_ASSOC) ||
-                                   (scact->scact_assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((scact->scact_assoc_id == 
SCTP_CURRENT_ASSOC) ||
+                                   (scact->scact_assoc_id == SCTP_ALL_ASSOC))) 
{
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4501,8 +4546,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (scdel->scact_assoc_id == 
SCTP_FUTURE_ASSOC) ||
-                                   (scdel->scact_assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((scdel->scact_assoc_id == 
SCTP_FUTURE_ASSOC) ||
+                                   (scdel->scact_assoc_id == 
SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (sctp_delete_sharedkey_ep(inp, 
scdel->scact_keynumber)) {
                                                SCTP_LTRACE_ERR_RET(inp, NULL, 
NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
@@ -4510,8 +4556,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                        }
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((scdel->scact_assoc_id == 
SCTP_CURRENT_ASSOC) ||
-                                   (scdel->scact_assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((scdel->scact_assoc_id == 
SCTP_CURRENT_ASSOC) ||
+                                   (scdel->scact_assoc_id == SCTP_ALL_ASSOC))) 
{
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4540,8 +4587,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (keyid->scact_assoc_id == 
SCTP_FUTURE_ASSOC) ||
-                                   (keyid->scact_assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((keyid->scact_assoc_id == 
SCTP_FUTURE_ASSOC) ||
+                                   (keyid->scact_assoc_id == 
SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (sctp_deact_sharedkey_ep(inp, 
keyid->scact_keynumber)) {
                                                SCTP_LTRACE_ERR_RET(inp, NULL, 
NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
@@ -4549,8 +4597,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                        }
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((keyid->scact_assoc_id == 
SCTP_CURRENT_ASSOC) ||
-                                   (keyid->scact_assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((keyid->scact_assoc_id == 
SCTP_CURRENT_ASSOC) ||
+                                   (keyid->scact_assoc_id == SCTP_ALL_ASSOC))) 
{
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4579,14 +4628,16 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_FUTURE_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->local_strreset_support = 
(uint8_t)av->assoc_value;
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4934,14 +4985,16 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_FUTURE_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->sctp_ep.max_burst = 
av->assoc_value;
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
-                                   (av->assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((av->assoc_id == SCTP_CURRENT_ASSOC) ||
+                                   (av->assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -4976,7 +5029,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        /*
                                         * FIXME MT: I think this is not in
@@ -5187,14 +5241,16 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (s_info->sinfo_assoc_id == 
SCTP_FUTURE_ASSOC) ||
-                                   (s_info->sinfo_assoc_id == SCTP_ALL_ASSOC)) 
{
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((s_info->sinfo_assoc_id == 
SCTP_FUTURE_ASSOC) ||
+                                   (s_info->sinfo_assoc_id == 
SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        memcpy(&inp->def_send, s_info, 
min(optsize, sizeof(inp->def_send)));
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((s_info->sinfo_assoc_id == 
SCTP_CURRENT_ASSOC) ||
-                                   (s_info->sinfo_assoc_id == SCTP_ALL_ASSOC)) 
{
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((s_info->sinfo_assoc_id == 
SCTP_CURRENT_ASSOC) ||
+                                   (s_info->sinfo_assoc_id == 
SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -5542,7 +5598,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                /************************NO TCB, SET TO default 
stuff ******************/
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (paddrp->spp_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (paddrp->spp_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        /*
                                         * For the TOS/FLOWLABEL stuff you
@@ -5633,7 +5690,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (srto->srto_assoc_id == SCTP_FUTURE_ASSOC)) 
{
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (srto->srto_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (srto->srto_initial)
                                                new_init = srto->srto_initial;
@@ -5687,7 +5745,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (sasoc->sasoc_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (sasoc->sasoc_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (sasoc->sasoc_asocmaxrxt)
                                                inp->sctp_ep.max_send_times = 
sasoc->sasoc_asocmaxrxt;
@@ -6098,8 +6157,7 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                         * sender dry events
                                         */
                                        if ((event_type == 
SCTP_PCB_FLAGS_DRYEVNT) &&
-                                           ((inp->sctp_flags & 
SCTP_PCB_FLAGS_TCPTYPE) == 0) &&
-                                           ((inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) == 0) &&
+                                           (inp->sctp_flags & 
SCTP_PCB_FLAGS_UDPTYPE) &&
                                            ((event->se_assoc_id == 
SCTP_ALL_ASSOC) ||
                                            (event->se_assoc_id == 
SCTP_CURRENT_ASSOC))) {
                                                SCTP_LTRACE_ERR_RET(inp, NULL, 
NULL, SCTP_FROM_SCTP_USRREQ, ENOTSUP);
@@ -6108,8 +6166,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                        }
                                        if ((inp->sctp_flags & 
SCTP_PCB_FLAGS_TCPTYPE) ||
                                            (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                           (event->se_assoc_id == 
SCTP_FUTURE_ASSOC) ||
-                                           (event->se_assoc_id == 
SCTP_ALL_ASSOC)) {
+                                           ((inp->sctp_flags & 
SCTP_PCB_FLAGS_UDPTYPE) &&
+                                           ((event->se_assoc_id == 
SCTP_FUTURE_ASSOC) ||
+                                           (event->se_assoc_id == 
SCTP_ALL_ASSOC)))) {
                                                SCTP_INP_WLOCK(inp);
                                                if (event->se_on) {
                                                        sctp_feature_on(inp, 
event_type);
@@ -6118,8 +6177,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                                }
                                                SCTP_INP_WUNLOCK(inp);
                                        }
-                                       if ((event->se_assoc_id == 
SCTP_CURRENT_ASSOC) ||
-                                           (event->se_assoc_id == 
SCTP_ALL_ASSOC)) {
+                                       if ((inp->sctp_flags & 
SCTP_PCB_FLAGS_UDPTYPE) &&
+                                           ((event->se_assoc_id == 
SCTP_CURRENT_ASSOC) ||
+                                           (event->se_assoc_id == 
SCTP_ALL_ASSOC))) {
                                                SCTP_INP_RLOCK(inp);
                                                LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                        SCTP_TCB_LOCK(stcb);
@@ -6192,8 +6252,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (info->snd_assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (info->snd_assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((info->snd_assoc_id == SCTP_FUTURE_ASSOC) 
||
+                                   (info->snd_assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->def_send.sinfo_stream = 
info->snd_sid;
                                        policy = 
PR_SCTP_POLICY(inp->def_send.sinfo_flags);
@@ -6203,8 +6264,9 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                        inp->def_send.sinfo_context = 
info->snd_context;
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((info->snd_assoc_id == SCTP_CURRENT_ASSOC) 
||
-                                   (info->snd_assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((info->snd_assoc_id == SCTP_CURRENT_ASSOC) 
||
+                                   (info->snd_assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -6246,16 +6308,18 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (info->pr_assoc_id == SCTP_FUTURE_ASSOC) ||
-                                   (info->pr_assoc_id == SCTP_ALL_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((info->pr_assoc_id == SCTP_FUTURE_ASSOC) ||
+                                   (info->pr_assoc_id == SCTP_ALL_ASSOC)))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->def_send.sinfo_flags &= 0xfff0;
                                        inp->def_send.sinfo_flags |= 
info->pr_policy;
                                        inp->def_send.sinfo_timetolive = 
info->pr_value;
                                        SCTP_INP_WUNLOCK(inp);
                                }
-                               if ((info->pr_assoc_id == SCTP_CURRENT_ASSOC) ||
-                                   (info->pr_assoc_id == SCTP_ALL_ASSOC)) {
+                               if ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   ((info->pr_assoc_id == SCTP_CURRENT_ASSOC) 
||
+                                   (info->pr_assoc_id == SCTP_ALL_ASSOC))) {
                                        SCTP_INP_RLOCK(inp);
                                        LIST_FOREACH(stcb, 
&inp->sctp_asoc_list, sctp_tcblist) {
                                                SCTP_TCB_LOCK(stcb);
@@ -6430,7 +6494,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (thlds->spt_assoc_id == SCTP_FUTURE_ASSOC)) 
{
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (thlds->spt_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->sctp_ep.def_net_failure = 
thlds->spt_pathmaxrxt;
                                        inp->sctp_ep.def_net_pf_threshold = 
thlds->spt_pathpfthld;
@@ -6534,7 +6599,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (encaps->sue_assoc_id == 
SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (encaps->sue_assoc_id == 
SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->sctp_ep.port = encaps->sue_port;
                                        SCTP_INP_WUNLOCK(inp);
@@ -6559,7 +6625,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (av->assoc_value == 0) {
                                                inp->ecn_supported = 0;
@@ -6588,7 +6655,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (av->assoc_value == 0) {
                                                inp->prsctp_supported = 0;
@@ -6617,7 +6685,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        if ((av->assoc_value == 0) &&
                                            (inp->asconf_supported == 1)) {
                                                /*
@@ -6656,7 +6725,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        if ((av->assoc_value != 0) &&
                                            (inp->auth_supported == 0)) {
                                                /*
@@ -6703,7 +6773,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (av->assoc_value == 0) {
                                                inp->reconfig_supported = 0;
@@ -6732,7 +6803,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (av->assoc_value == 0) {
                                                inp->nrsack_supported = 0;
@@ -6761,7 +6833,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        if (av->assoc_value == 0) {
                                                inp->pktdrop_supported = 0;
@@ -6801,7 +6874,8 @@ sctp_setopt(struct socket *so, int optname, void *optv
                        } else {
                                if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) 
||
                                    (inp->sctp_flags & 
SCTP_PCB_FLAGS_IN_TCPPOOL) ||
-                                   (av->assoc_id == SCTP_FUTURE_ASSOC)) {
+                                   ((inp->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) 
&&
+                                   (av->assoc_id == SCTP_FUTURE_ASSOC))) {
                                        SCTP_INP_WLOCK(inp);
                                        inp->max_cwnd = av->assoc_value;
                                        SCTP_INP_WUNLOCK(inp);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to