Author: tuexen
Date: Sun Mar 27 10:04:25 2016
New Revision: 297312
URL: https://svnweb.freebsd.org/changeset/base/297312

Log:
  Improve compilation on windows 64-bit (for the userland stack).
  
  MFC after:    1 week

Modified:
  head/sys/netinet/sctp_constants.h
  head/sys/netinet/sctp_indata.c
  head/sys/netinet/sctp_input.c
  head/sys/netinet/sctp_output.c
  head/sys/netinet/sctp_timer.c
  head/sys/netinet/sctp_usrreq.c
  head/sys/netinet/sctputil.c
  head/sys/netinet/sctputil.h

Modified: head/sys/netinet/sctp_constants.h
==============================================================================
--- head/sys/netinet/sctp_constants.h   Sun Mar 27 08:21:17 2016        
(r297311)
+++ head/sys/netinet/sctp_constants.h   Sun Mar 27 10:04:25 2016        
(r297312)
@@ -68,6 +68,8 @@ __FBSDID("$FreeBSD$");
 
 /* Largest length of a chunk */
 #define SCTP_MAX_CHUNK_LENGTH 0xffff
+/* Largest length of an error cause */
+#define SCTP_MAX_CAUSE_LENGTH 0xffff
 /* Number of addresses where we just skip the counting */
 #define SCTP_COUNT_LIMIT 40
 

Modified: head/sys/netinet/sctp_indata.c
==============================================================================
--- head/sys/netinet/sctp_indata.c      Sun Mar 27 08:21:17 2016        
(r297311)
+++ head/sys/netinet/sctp_indata.c      Sun Mar 27 10:04:25 2016        
(r297312)
@@ -2495,7 +2495,7 @@ sctp_process_data(struct mbuf **mm, int 
                                        if (op_err != NULL) {
                                                cause = mtod(op_err, struct 
sctp_gen_error_cause *);
                                                cause->code = 
htons(SCTP_CAUSE_UNRECOG_CHUNK);
-                                               cause->length = 
htons(chk_length + sizeof(struct sctp_gen_error_cause));
+                                               cause->length = 
htons((uint16_t) (chk_length + sizeof(struct sctp_gen_error_cause)));
                                                SCTP_BUF_LEN(op_err) = 
sizeof(struct sctp_gen_error_cause);
                                                SCTP_BUF_NEXT(op_err) = 
SCTP_M_COPYM(m, *offset, chk_length, M_NOWAIT);
                                                if (SCTP_BUF_NEXT(op_err) != 
NULL) {
@@ -2688,7 +2688,7 @@ sctp_process_segment_range(struct sctp_t
                                                        
sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_GAP,
                                                            
tp1->whoTo->flight_size,
                                                            tp1->book_size,
-                                                           (uintptr_t) 
tp1->whoTo,
+                                                           (uint32_t) 
(uintptr_t) tp1->whoTo,
                                                            
tp1->rec.data.TSN_seq);
                                                }
                                                sctp_flight_size_decrease(tp1);
@@ -2897,7 +2897,7 @@ sctp_check_for_revoked(struct sctp_tcb *
                                        
sctp_misc_ints(SCTP_FLIGHT_LOG_UP_REVOKE,
                                            tp1->whoTo->flight_size,
                                            tp1->book_size,
-                                           (uintptr_t) tp1->whoTo,
+                                           (uint32_t) (uintptr_t) tp1->whoTo,
                                            tp1->rec.data.TSN_seq);
                                }
                                sctp_flight_size_increase(tp1);
@@ -3211,7 +3211,7 @@ sctp_strike_gap_ack_chunks(struct sctp_t
                                sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_RSND,
                                    (tp1->whoTo ? (tp1->whoTo->flight_size) : 
0),
                                    tp1->book_size,
-                                   (uintptr_t) tp1->whoTo,
+                                   (uint32_t) (uintptr_t) tp1->whoTo,
                                    tp1->rec.data.TSN_seq);
                        }
                        if (tp1->whoTo) {
@@ -3523,7 +3523,7 @@ sctp_window_probe_recovery(struct sctp_t
                sctp_misc_ints(SCTP_FLIGHT_LOG_DWN_WP_FWD,
                    tp1->whoTo ? tp1->whoTo->flight_size : 0,
                    tp1->book_size,
-                   (uintptr_t) tp1->whoTo,
+                   (uint32_t) (uintptr_t) tp1->whoTo,
                    tp1->rec.data.TSN_seq);
                return;
        }
@@ -3542,7 +3542,7 @@ sctp_window_probe_recovery(struct sctp_t
                sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_WP,
                    tp1->whoTo->flight_size,
                    tp1->book_size,
-                   (uintptr_t) tp1->whoTo,
+                   (uint32_t) (uintptr_t) tp1->whoTo,
                    tp1->rec.data.TSN_seq);
        }
 }
@@ -3661,7 +3661,7 @@ sctp_express_handle_sack(struct sctp_tcb
                                                        
sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_CA,
                                                            
tp1->whoTo->flight_size,
                                                            tp1->book_size,
-                                                           (uintptr_t) 
tp1->whoTo,
+                                                           (uint32_t) 
(uintptr_t) tp1->whoTo,
                                                            
tp1->rec.data.TSN_seq);
                                                }
                                                sctp_flight_size_decrease(tp1);
@@ -4302,7 +4302,7 @@ sctp_handle_sack(struct mbuf *m, int off
                                                        
sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_CA,
                                                            
tp1->whoTo->flight_size,
                                                            tp1->book_size,
-                                                           (uintptr_t) 
tp1->whoTo,
+                                                           (uint32_t) 
(uintptr_t) tp1->whoTo,
                                                            
tp1->rec.data.TSN_seq);
                                                }
                                                sctp_flight_size_decrease(tp1);
@@ -4575,7 +4575,7 @@ sctp_handle_sack(struct mbuf *m, int off
                                        
sctp_misc_ints(SCTP_FLIGHT_LOG_UP_REVOKE,
                                            tp1->whoTo->flight_size,
                                            tp1->book_size,
-                                           (uintptr_t) tp1->whoTo,
+                                           (uint32_t) (uintptr_t) tp1->whoTo,
                                            tp1->rec.data.TSN_seq);
                                }
                                sctp_flight_size_increase(tp1);

Modified: head/sys/netinet/sctp_input.c
==============================================================================
--- head/sys/netinet/sctp_input.c       Sun Mar 27 08:21:17 2016        
(r297311)
+++ head/sys/netinet/sctp_input.c       Sun Mar 27 10:04:25 2016        
(r297312)
@@ -2358,7 +2358,7 @@ sctp_process_cookie_new(struct mbuf *m, 
                    SCTP_RTT_FROM_NON_DATA);
 #if defined(INET) || defined(INET6)
                if (((*netp)->port == 0) && (port != 0)) {
-                       sctp_pathmtu_adjustment(stcb, (*netp)->mtu - 
sizeof(struct udphdr));
+                       sctp_pathmtu_adjustment(stcb, (uint16_t) ((*netp)->mtu 
- sizeof(struct udphdr)));
                }
                (*netp)->port = port;
 #endif
@@ -3339,7 +3339,7 @@ process_chunk_drop(struct sctp_tcb *stcb
                                        
sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_PDRP,
                                            tp1->whoTo->flight_size,
                                            tp1->book_size,
-                                           (uintptr_t) stcb,
+                                           (uint32_t) (uintptr_t) stcb,
                                            tp1->rec.data.TSN_seq);
                                }
                                if (tp1->sent < SCTP_DATAGRAM_RESEND) {
@@ -5596,7 +5596,7 @@ process_control_chunks:
                                        len = min(SCTP_SIZE32(chk_length), 
(uint32_t) (length - *offset));
                                        cause = mtod(op_err, struct 
sctp_gen_error_cause *);
                                        cause->code = 
htons(SCTP_CAUSE_UNRECOG_CHUNK);
-                                       cause->length = htons(len + 
sizeof(struct sctp_gen_error_cause));
+                                       cause->length = htons((uint16_t) (len + 
sizeof(struct sctp_gen_error_cause)));
                                        SCTP_BUF_LEN(op_err) = sizeof(struct 
sctp_gen_error_cause);
                                        SCTP_BUF_NEXT(op_err) = SCTP_M_COPYM(m, 
*offset, len, M_NOWAIT);
                                        if (SCTP_BUF_NEXT(op_err) != NULL) {

Modified: head/sys/netinet/sctp_output.c
==============================================================================
--- head/sys/netinet/sctp_output.c      Sun Mar 27 08:21:17 2016        
(r297311)
+++ head/sys/netinet/sctp_output.c      Sun Mar 27 10:04:25 2016        
(r297312)
@@ -3508,7 +3508,7 @@ sctp_find_cmsg(int c_type, void *data, s
                                        return (found);
                                }
                                /* It is exactly what we want. Copy it out. */
-                               m_copydata(control, at + 
CMSG_ALIGN(sizeof(cmh)), cpsize, (caddr_t)data);
+                               m_copydata(control, at + 
CMSG_ALIGN(sizeof(cmh)), (int)cpsize, (caddr_t)data);
                                return (1);
                        } else {
                                struct sctp_sndrcvinfo *sndrcvinfo;
@@ -4186,7 +4186,7 @@ sctp_lowlevel_chunk_output(struct sctp_i
                                udp = (struct udphdr *)((caddr_t)ip + 
sizeof(struct ip));
                                udp->uh_sport = 
htons(SCTP_BASE_SYSCTL(sctp_udp_tunneling_port));
                                udp->uh_dport = port;
-                               udp->uh_ulen = htons(packet_length - 
sizeof(struct ip));
+                               udp->uh_ulen = htons((uint16_t) (packet_length 
- sizeof(struct ip)));
                                if (V_udp_cksum) {
                                        udp->uh_sum = 
in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr, udp->uh_ulen + 
htons(IPPROTO_UDP));
                                } else {
@@ -4414,7 +4414,7 @@ sctp_lowlevel_chunk_output(struct sctp_i
                        } else {
                                ip6h->ip6_nxt = IPPROTO_SCTP;
                        }
-                       ip6h->ip6_plen = (packet_length - sizeof(struct 
ip6_hdr));
+                       ip6h->ip6_plen = (uint16_t) (packet_length - 
sizeof(struct ip6_hdr));
                        ip6h->ip6_dst = sin6->sin6_addr;
 
                        /*
@@ -4533,7 +4533,7 @@ sctp_lowlevel_chunk_output(struct sctp_i
                                udp = (struct udphdr *)((caddr_t)ip6h + 
sizeof(struct ip6_hdr));
                                udp->uh_sport = 
htons(SCTP_BASE_SYSCTL(sctp_udp_tunneling_port));
                                udp->uh_dport = port;
-                               udp->uh_ulen = htons(packet_length - 
sizeof(struct ip6_hdr));
+                               udp->uh_ulen = htons((uint16_t) (packet_length 
- sizeof(struct ip6_hdr)));
                                udp->uh_sum = 0;
                                sctphdr = (struct sctphdr *)((caddr_t)udp + 
sizeof(struct udphdr));
                        } else {
@@ -6479,10 +6479,10 @@ error_out:
                                        }
                                }
                                /* get the new end of length */
-                               len = M_TRAILINGSPACE(*endofchain);
+                               len = (int)M_TRAILINGSPACE(*endofchain);
                        } else {
                                /* how much is left at the end? */
-                               len = M_TRAILINGSPACE(*endofchain);
+                               len = (int)M_TRAILINGSPACE(*endofchain);
                        }
                        /* Find the end of the data, for appending */
                        cp = (mtod((*endofchain), 
caddr_t)+SCTP_BUF_LEN((*endofchain)));
@@ -6636,7 +6636,7 @@ sctp_sendall_iterator(struct sctp_inpcb 
 
                        ph = mtod(m, struct sctp_paramhdr *);
                        ph->param_type = htons(SCTP_CAUSE_USER_INITIATED_ABT);
-                       ph->param_length = htons(sizeof(struct sctp_paramhdr) + 
ca->sndlen);
+                       ph->param_length = htons((uint16_t) (sizeof(struct 
sctp_paramhdr) + ca->sndlen));
                }
                /*
                 * We add one here to keep the assoc from dis-appearing on
@@ -6814,7 +6814,7 @@ sctp_copy_out_all(struct uio *uio, int l
        left = len;
        SCTP_BUF_LEN(ret) = 0;
        /* save space for the data chunk header */
-       cancpy = M_TRAILINGSPACE(ret);
+       cancpy = (int)M_TRAILINGSPACE(ret);
        willcpy = min(cancpy, left);
        at = ret;
        while (left > 0) {
@@ -6835,7 +6835,7 @@ sctp_copy_out_all(struct uio *uio, int l
                        }
                        at = SCTP_BUF_NEXT(at);
                        SCTP_BUF_LEN(at) = 0;
-                       cancpy = M_TRAILINGSPACE(at);
+                       cancpy = (int)M_TRAILINGSPACE(at);
                        willcpy = min(cancpy, left);
                }
        }
@@ -6869,7 +6869,7 @@ sctp_sendall(struct sctp_inpcb *inp, str
        ca->sndrcv.sinfo_flags &= ~SCTP_SENDALL;
        /* get length and mbuf chain */
        if (uio) {
-               ca->sndlen = uio->uio_resid;
+               ca->sndlen = (int)uio->uio_resid;
                ca->m = sctp_copy_out_all(uio, ca->sndlen);
                if (ca->m == NULL) {
                        SCTP_FREE(ca, SCTP_M_COPYAL);
@@ -7019,7 +7019,7 @@ all_done:
                        sctp_misc_ints(SCTP_FLIGHT_LOG_UP,
                            data_list[i]->whoTo->flight_size,
                            data_list[i]->book_size,
-                           (uintptr_t) data_list[i]->whoTo,
+                           (uint32_t) (uintptr_t) data_list[i]->whoTo,
                            data_list[i]->rec.data.TSN_seq);
                }
                sctp_flight_size_increase(data_list[i]);
@@ -7516,7 +7516,7 @@ dont_do_it:
                goto out_of;
        }
        sctp_snd_sb_alloc(stcb, sizeof(struct sctp_data_chunk));
-       chk->book_size = chk->send_size = (to_move + sizeof(struct 
sctp_data_chunk));
+       chk->book_size = chk->send_size = (uint16_t) (to_move + sizeof(struct 
sctp_data_chunk));
        chk->book_size_scale = 0;
        chk->sent = SCTP_DATAGRAM_UNSENT;
 
@@ -7551,7 +7551,7 @@ dont_do_it:
        chk->rec.data.TSN_seq = atomic_fetchadd_int(&asoc->sending_seq, 1);
        if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_LOG_AT_SEND_2_OUTQ) {
                sctp_misc_ints(SCTP_STRMOUT_LOG_SEND,
-                   (uintptr_t) stcb, sp->length,
+                   (uint32_t) (uintptr_t) stcb, sp->length,
                    (uint32_t) ((chk->rec.data.stream_number << 16) | 
chk->rec.data.stream_seq),
                    chk->rec.data.TSN_seq);
        }
@@ -9827,7 +9827,7 @@ one_chunk_around:
                                        sctp_misc_ints(SCTP_FLIGHT_LOG_UP_RSND,
                                            data_list[i]->whoTo->flight_size,
                                            data_list[i]->book_size,
-                                           (uintptr_t) data_list[i]->whoTo,
+                                           (uint32_t) (uintptr_t) 
data_list[i]->whoTo,
                                            data_list[i]->rec.data.TSN_seq);
                                }
                                sctp_flight_size_increase(data_list[i]);
@@ -10288,7 +10288,7 @@ sctp_fill_in_rest:
                space_needed = (sizeof(struct sctp_forward_tsn_chunk) +
                    (cnt_of_skipped * sizeof(struct sctp_strseq)));
 
-               cnt_of_space = M_TRAILINGSPACE(chk->data);
+               cnt_of_space = (unsigned int)M_TRAILINGSPACE(chk->data);
 
                if (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) {
                        ovh = SCTP_MIN_OVERHEAD;
@@ -10546,7 +10546,7 @@ sctp_send_sack(struct sctp_tcb *stcb, in
        }
        /* ok, lets go through and fill it in */
        SCTP_BUF_RESV_UF(a_chk->data, SCTP_MIN_OVERHEAD);
-       space = M_TRAILINGSPACE(a_chk->data);
+       space = (unsigned int)M_TRAILINGSPACE(a_chk->data);
        if (space > (a_chk->whoTo->mtu - SCTP_MIN_OVERHEAD)) {
                space = (a_chk->whoTo->mtu - SCTP_MIN_OVERHEAD);
        }
@@ -10760,9 +10760,9 @@ sctp_send_sack(struct sctp_tcb *stcb, in
         * queue.
         */
        if (type == SCTP_SELECTIVE_ACK) {
-               a_chk->send_size = sizeof(struct sctp_sack_chunk) +
+               a_chk->send_size = (uint16_t) (sizeof(struct sctp_sack_chunk) +
                    (num_gap_blocks + num_nr_gap_blocks) * sizeof(struct 
sctp_gap_ack_block) +
-                   num_dups * sizeof(int32_t);
+                   num_dups * sizeof(int32_t));
                SCTP_BUF_LEN(a_chk->data) = a_chk->send_size;
                sack->sack.cum_tsn_ack = htonl(asoc->cumulative_tsn);
                sack->sack.a_rwnd = htonl(asoc->my_rwnd);
@@ -10772,9 +10772,9 @@ sctp_send_sack(struct sctp_tcb *stcb, in
                sack->ch.chunk_flags = flags;
                sack->ch.chunk_length = htons(a_chk->send_size);
        } else {
-               a_chk->send_size = sizeof(struct sctp_nr_sack_chunk) +
+               a_chk->send_size = (uint16_t) (sizeof(struct 
sctp_nr_sack_chunk) +
                    (num_gap_blocks + num_nr_gap_blocks) * sizeof(struct 
sctp_gap_ack_block) +
-                   num_dups * sizeof(int32_t);
+                   num_dups * sizeof(int32_t));
                SCTP_BUF_LEN(a_chk->data) = a_chk->send_size;
                nr_sack->nr_sack.cum_tsn_ack = htonl(asoc->cumulative_tsn);
                nr_sack->nr_sack.a_rwnd = htonl(asoc->my_rwnd);
@@ -11082,10 +11082,10 @@ sctp_send_resp_msg(struct sockaddr *src,
                udp->uh_sport = 
htons(SCTP_BASE_SYSCTL(sctp_udp_tunneling_port));
                udp->uh_dport = port;
                udp->uh_sum = 0;
-               udp->uh_ulen = htons(sizeof(struct udphdr) +
+               udp->uh_ulen = htons((uint16_t) (sizeof(struct udphdr) +
                    sizeof(struct sctphdr) +
                    sizeof(struct sctp_chunkhdr) +
-                   cause_len + padding_len);
+                   cause_len + padding_len));
                len += sizeof(struct udphdr);
                shout = (struct sctphdr *)((caddr_t)shout + sizeof(struct 
udphdr));
        } else {
@@ -11108,7 +11108,7 @@ sctp_send_resp_msg(struct sockaddr *src,
        } else {
                ch->chunk_flags = SCTP_HAD_NO_TCB;
        }
-       ch->chunk_length = htons(sizeof(struct sctp_chunkhdr) + cause_len);
+       ch->chunk_length = htons((uint16_t) (sizeof(struct sctp_chunkhdr) + 
cause_len));
        len += sizeof(struct sctp_chunkhdr);
        len += cause_len + padding_len;
 
@@ -11157,7 +11157,7 @@ sctp_send_resp_msg(struct sockaddr *src,
 #endif
 #ifdef INET6
        case AF_INET6:
-               ip6->ip6_plen = len - sizeof(struct ip6_hdr);
+               ip6->ip6_plen = (uint16_t) (len - sizeof(struct ip6_hdr));
                if (port) {
 #if defined(SCTP_WITH_NO_CSUM)
                        SCTP_STAT_INCR(sctps_sendnocrc);
@@ -11484,7 +11484,7 @@ jump_out:
                 * Len is already adjusted to size minus overhead above take
                 * out the pkt_drop chunk itself from it.
                 */
-               chk->send_size = len - sizeof(struct sctp_pktdrop_chunk);
+               chk->send_size = (uint16_t) (len - sizeof(struct 
sctp_pktdrop_chunk));
                len = chk->send_size;
        } else {
                /* no truncation needed */
@@ -11624,7 +11624,7 @@ sctp_add_stream_reset_out(struct sctp_tc
        if (number_entries > SCTP_MAX_STREAMS_AT_ONCE_RESET) {
                number_entries = SCTP_MAX_STREAMS_AT_ONCE_RESET;
        }
-       len = (sizeof(struct sctp_stream_reset_out_request) + (sizeof(uint16_t) 
* number_entries));
+       len = (uint16_t) (sizeof(struct sctp_stream_reset_out_request) + 
(sizeof(uint16_t) * number_entries));
        req_out->ph.param_type = htons(SCTP_STR_RESET_OUT_REQUEST);
        req_out->ph.param_length = htons(len);
        req_out->request_seq = htonl(seq);
@@ -11681,7 +11681,7 @@ sctp_add_stream_reset_in(struct sctp_tmi
        /* get to new offset for the param. */
        req_in = (struct sctp_stream_reset_in_request *)((caddr_t)ch + len);
        /* now how long will this param be? */
-       len = (sizeof(struct sctp_stream_reset_in_request) + (sizeof(uint16_t) 
* number_entries));
+       len = (uint16_t) (sizeof(struct sctp_stream_reset_in_request) + 
(sizeof(uint16_t) * number_entries));
        req_in->ph.param_type = htons(SCTP_STR_RESET_IN_REQUEST);
        req_in->ph.param_length = htons(len);
        req_in->request_seq = htonl(seq);
@@ -12313,7 +12313,7 @@ sctp_copy_it_in(struct sctp_tcb *stcb,
        (void)SCTP_GETTIME_TIMEVAL(&sp->ts);
 
        sp->stream = srcv->sinfo_stream;
-       sp->length = min(uio->uio_resid, max_send_len);
+       sp->length = (uint32_t) min(uio->uio_resid, max_send_len);
        if ((sp->length == (uint32_t) uio->uio_resid) &&
            ((user_marks_eor == 0) ||
            (srcv->sinfo_flags & SCTP_EOF) ||
@@ -12472,7 +12472,7 @@ sctp_lower_sosend(struct socket *so,
                        SCTP_LTRACE_ERR_RET(inp, stcb, net, 
SCTP_FROM_SCTP_OUTPUT, EINVAL);
                        return (EINVAL);
                }
-               sndlen = uio->uio_resid;
+               sndlen = (unsigned int)uio->uio_resid;
        } else {
                top = SCTP_HEADER_TO_CHAIN(i_pak);
                sndlen = SCTP_HEADER_LEN(i_pak);
@@ -12871,7 +12871,7 @@ sctp_lower_sosend(struct socket *so,
                        /* now move forward the data pointer */
                        ph = mtod(mm, struct sctp_paramhdr *);
                        ph->param_type = htons(SCTP_CAUSE_USER_INITIATED_ABT);
-                       ph->param_length = htons(sizeof(struct sctp_paramhdr) + 
tot_out);
+                       ph->param_length = htons((uint16_t) (sizeof(struct 
sctp_paramhdr) + tot_out));
                        ph++;
                        SCTP_BUF_LEN(mm) = tot_out + sizeof(struct 
sctp_paramhdr);
                        if (top == NULL) {
@@ -13291,7 +13291,7 @@ skip_preblock:
                            min(SCTP_BASE_SYSCTL(sctp_add_more_threshold), 
SCTP_SB_LIMIT_SND(so)))) {
                                if (SCTP_BASE_SYSCTL(sctp_logging_level) & 
SCTP_BLK_LOGGING_ENABLE) {
                                        sctp_log_block(SCTP_BLOCK_LOG_INTO_BLK,
-                                           asoc, uio->uio_resid);
+                                           asoc, (size_t)uio->uio_resid);
                                }
                                be.error = 0;
                                stcb->block_entry = &be;

Modified: head/sys/netinet/sctp_timer.c
==============================================================================
--- head/sys/netinet/sctp_timer.c       Sun Mar 27 08:21:17 2016        
(r297311)
+++ head/sys/netinet/sctp_timer.c       Sun Mar 27 10:04:25 2016        
(r297312)
@@ -662,7 +662,7 @@ start_again:
                                        
sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_RSND_TO,
                                            chk->whoTo->flight_size,
                                            chk->book_size,
-                                           (uintptr_t) chk->whoTo,
+                                           (uint32_t) (uintptr_t) chk->whoTo,
                                            chk->rec.data.TSN_seq);
                                }
                                sctp_flight_size_decrease(chk);
@@ -790,7 +790,7 @@ start_again:
                                        sctp_misc_ints(SCTP_FLIGHT_LOG_UP,
                                            chk->whoTo->flight_size,
                                            chk->book_size,
-                                           (uintptr_t) chk->whoTo,
+                                           (uint32_t) (uintptr_t) chk->whoTo,
                                            chk->rec.data.TSN_seq);
                                }
                                sctp_flight_size_increase(chk);

Modified: head/sys/netinet/sctp_usrreq.c
==============================================================================
--- head/sys/netinet/sctp_usrreq.c      Sun Mar 27 08:21:17 2016        
(r297311)
+++ head/sys/netinet/sctp_usrreq.c      Sun Mar 27 10:04:25 2016        
(r297312)
@@ -132,7 +132,7 @@ sctp_pathmtu_adjustment(struct sctp_tcb 
                                        
sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_PMTU,
                                            chk->whoTo->flight_size,
                                            chk->book_size,
-                                           (uintptr_t) chk->whoTo,
+                                           (uint32_t) (uintptr_t) chk->whoTo,
                                            chk->rec.data.TSN_seq);
                                }
                                /* Clear any time so NO RTT is being done */
@@ -1413,7 +1413,7 @@ sctp_do_connect_x(struct socket *so, str
        int creat_lock_on = 0;
        struct sctp_tcb *stcb = NULL;
        struct sockaddr *sa;
-       int num_v6 = 0, num_v4 = 0, *totaddrp, totaddr;
+       unsigned int num_v6 = 0, num_v4 = 0, *totaddrp, totaddr;
        uint32_t vrf_id;
        int bad_addresses = 0;
        sctp_assoc_t *a_id;
@@ -1449,10 +1449,10 @@ sctp_do_connect_x(struct socket *so, str
                error = EFAULT;
                goto out_now;
        }
-       totaddrp = (int *)optval;
+       totaddrp = (unsigned int *)optval;
        totaddr = *totaddrp;
        sa = (struct sockaddr *)(totaddrp + 1);
-       stcb = sctp_connectx_helper_find(inp, sa, &totaddr, &num_v4, &num_v6, 
&error, (optsize - sizeof(int)), &bad_addresses);
+       stcb = sctp_connectx_helper_find(inp, sa, &totaddr, &num_v4, &num_v6, 
&error, (unsigned int)(optsize - sizeof(int)), &bad_addresses);
        if ((stcb != NULL) || bad_addresses) {
                /* Already have or am bring up an association */
                SCTP_ASOC_CREATE_UNLOCK(inp);
@@ -1903,7 +1903,8 @@ flags_out:
        case SCTP_GET_ASSOC_ID_LIST:
                {
                        struct sctp_assoc_ids *ids;
-                       unsigned int at, limit;
+                       uint32_t at;
+                       size_t limit;
 
                        SCTP_CHECK_AND_CAST(ids, optval, struct sctp_assoc_ids, 
*optsize);
                        SCTP_INP_RLOCK(inp);
@@ -1919,6 +1920,11 @@ flags_out:
                        LIST_FOREACH(stcb, &inp->sctp_asoc_list, sctp_tcblist) {
                                if (at < limit) {
                                        ids->gaids_assoc_id[at++] = 
sctp_get_associd(stcb);
+                                       if (at == 0) {
+                                               error = EINVAL;
+                                               SCTP_LTRACE_ERR_RET(inp, NULL, 
NULL, SCTP_FROM_SCTP_USRREQ, error);
+                                               break;
+                                       }
                                } else {
                                        error = EINVAL;
                                        SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTP_USRREQ, error);

Modified: head/sys/netinet/sctputil.c
==============================================================================
--- head/sys/netinet/sctputil.c Sun Mar 27 08:21:17 2016        (r297311)
+++ head/sys/netinet/sctputil.c Sun Mar 27 10:04:25 2016        (r297312)
@@ -503,7 +503,7 @@ sctp_wakeup_log(struct sctp_tcb *stcb, u
 }
 
 void
-sctp_log_block(uint8_t from, struct sctp_association *asoc, int sendlen)
+sctp_log_block(uint8_t from, struct sctp_association *asoc, size_t sendlen)
 {
        struct sctp_cwnd_log sctp_clog;
 
@@ -513,7 +513,7 @@ sctp_log_block(uint8_t from, struct sctp
        sctp_clog.x.blk.stream_qcnt = (uint16_t) asoc->stream_queue_cnt;
        sctp_clog.x.blk.chunks_on_oque = (uint16_t) asoc->chunks_on_out_queue;
        sctp_clog.x.blk.flight_size = (uint16_t) (asoc->total_flight / 1024);
-       sctp_clog.x.blk.sndlen = sendlen;
+       sctp_clog.x.blk.sndlen = (uint32_t) sendlen;
        SCTP_CTR6(KTR_SCTP, "SCTP:%d[%d]:%x-%x-%x-%x",
            SCTP_LOG_EVENT_BLOCK,
            from,
@@ -2679,7 +2679,8 @@ sctp_notify_assoc_change(uint16_t state,
        struct mbuf *m_notify;
        struct sctp_assoc_change *sac;
        struct sctp_queued_to_read *control;
-       size_t notif_len, abort_len;
+       unsigned int notif_len;
+       uint16_t abort_len;
        unsigned int i;
 
 #if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING)
@@ -2691,7 +2692,7 @@ sctp_notify_assoc_change(uint16_t state,
                return;
        }
        if (sctp_stcb_is_feature_on(stcb->sctp_ep, stcb, 
SCTP_PCB_FLAGS_RECVASSOCEVNT)) {
-               notif_len = sizeof(struct sctp_assoc_change);
+               notif_len = (unsigned int)sizeof(struct sctp_assoc_change);
                if (abort != NULL) {
                        abort_len = ntohs(abort->ch.chunk_length);
                } else {
@@ -2705,7 +2706,7 @@ sctp_notify_assoc_change(uint16_t state,
                m_notify = sctp_get_mbuf_for_msg(notif_len, 0, M_NOWAIT, 1, 
MT_DATA);
                if (m_notify == NULL) {
                        /* Retry with smaller value. */
-                       notif_len = sizeof(struct sctp_assoc_change);
+                       notif_len = (unsigned int)sizeof(struct 
sctp_assoc_change);
                        m_notify = sctp_get_mbuf_for_msg(notif_len, 0, 
M_NOWAIT, 1, MT_DATA);
                        if (m_notify == NULL) {
                                goto set_error;
@@ -3570,7 +3571,8 @@ sctp_notify_remote_error(struct sctp_tcb
        struct mbuf *m_notify;
        struct sctp_remote_error *sre;
        struct sctp_queued_to_read *control;
-       size_t notif_len, chunk_len;
+       unsigned int notif_len;
+       uint16_t chunk_len;
 
        if ((stcb == NULL) ||
            sctp_stcb_is_feature_off(stcb->sctp_ep, stcb, 
SCTP_PCB_FLAGS_RECVPEERERR)) {
@@ -3581,11 +3583,11 @@ sctp_notify_remote_error(struct sctp_tcb
        } else {
                chunk_len = 0;
        }
-       notif_len = sizeof(struct sctp_remote_error) + chunk_len;
+       notif_len = (unsigned int)(sizeof(struct sctp_remote_error) + 
chunk_len);
        m_notify = sctp_get_mbuf_for_msg(notif_len, 0, M_NOWAIT, 1, MT_DATA);
        if (m_notify == NULL) {
                /* Retry with smaller value. */
-               notif_len = sizeof(struct sctp_remote_error);
+               notif_len = (unsigned int)sizeof(struct sctp_remote_error);
                m_notify = sctp_get_mbuf_for_msg(notif_len, 0, M_NOWAIT, 1, 
MT_DATA);
                if (m_notify == NULL) {
                        return;
@@ -4739,19 +4741,23 @@ sctp_generate_cause(uint16_t code, char 
 {
        struct mbuf *m;
        struct sctp_gen_error_cause *cause;
-       size_t info_len, len;
+       size_t info_len;
+       uint16_t len;
 
        if ((code == 0) || (info == NULL)) {
                return (NULL);
        }
        info_len = strlen(info);
-       len = sizeof(struct sctp_paramhdr) + info_len;
+       if (info_len > (SCTP_MAX_CAUSE_LENGTH - sizeof(struct sctp_paramhdr))) {
+               return (NULL);
+       }
+       len = (uint16_t) (sizeof(struct sctp_paramhdr) + info_len);
        m = sctp_get_mbuf_for_msg(len, 0, M_NOWAIT, 1, MT_DATA);
        if (m != NULL) {
                SCTP_BUF_LEN(m) = len;
                cause = mtod(m, struct sctp_gen_error_cause *);
                cause->code = htons(code);
-               cause->length = htons((uint16_t) len);
+               cause->length = htons(len);
                memcpy(cause->info, info, info_len);
        }
        return (m);
@@ -4762,15 +4768,15 @@ sctp_generate_no_user_data_cause(uint32_
 {
        struct mbuf *m;
        struct sctp_error_no_user_data *no_user_data_cause;
-       size_t len;
+       uint16_t len;
 
-       len = sizeof(struct sctp_error_no_user_data);
+       len = (uint16_t) sizeof(struct sctp_error_no_user_data);
        m = sctp_get_mbuf_for_msg(len, 0, M_NOWAIT, 1, MT_DATA);
        if (m != NULL) {
                SCTP_BUF_LEN(m) = len;
                no_user_data_cause = mtod(m, struct sctp_error_no_user_data *);
                no_user_data_cause->cause.code = htons(SCTP_CAUSE_NO_USER_DATA);
-               no_user_data_cause->cause.length = htons((uint16_t) len);
+               no_user_data_cause->cause.length = htons(len);
                no_user_data_cause->tsn = tsn;  /* tsn is passed in as NBO */
        }
        return (m);
@@ -5295,7 +5301,7 @@ sctp_sorecvmsg(struct socket *so,
        uint32_t rwnd_req = 0;
        int hold_sblock = 0;
        int hold_rlock = 0;
-       int slen = 0;
+       ssize_t slen = 0;
        uint32_t held_length = 0;
        int sockbuf_lock = 0;
 
@@ -5340,11 +5346,11 @@ sctp_sorecvmsg(struct socket *so,
        in_eeor_mode = sctp_is_feature_on(inp, SCTP_PCB_FLAGS_EXPLICIT_EOR);
        if (SCTP_BASE_SYSCTL(sctp_logging_level) & 
SCTP_RECV_RWND_LOGGING_ENABLE) {
                sctp_misc_ints(SCTP_SORECV_ENTER,
-                   rwnd_req, in_eeor_mode, so->so_rcv.sb_cc, uio->uio_resid);
+                   rwnd_req, in_eeor_mode, so->so_rcv.sb_cc, (uint32_t) 
uio->uio_resid);
        }
        if (SCTP_BASE_SYSCTL(sctp_logging_level) & 
SCTP_RECV_RWND_LOGGING_ENABLE) {
                sctp_misc_ints(SCTP_SORECV_ENTERPL,
-                   rwnd_req, block_allowed, so->so_rcv.sb_cc, uio->uio_resid);
+                   rwnd_req, block_allowed, so->so_rcv.sb_cc, (uint32_t) 
uio->uio_resid);
        }
        error = sblock(&so->so_rcv, (block_allowed ? SBL_WAIT : 0));
        if (error) {
@@ -6219,13 +6225,13 @@ out:
                if (stcb) {
                        sctp_misc_ints(SCTP_SORECV_DONE,
                            freed_so_far,
-                           ((uio) ? (slen - uio->uio_resid) : slen),
+                           (uint32_t) ((uio) ? (slen - uio->uio_resid) : slen),
                            stcb->asoc.my_rwnd,
                            so->so_rcv.sb_cc);
                } else {
                        sctp_misc_ints(SCTP_SORECV_DONE,
                            freed_so_far,
-                           ((uio) ? (slen - uio->uio_resid) : slen),
+                           (uint32_t) ((uio) ? (slen - uio->uio_resid) : slen),
                            0,
                            so->so_rcv.sb_cc);
                }
@@ -6452,30 +6458,30 @@ out_now:
 
 struct sctp_tcb *
 sctp_connectx_helper_find(struct sctp_inpcb *inp, struct sockaddr *addr,
-    int *totaddr, int *num_v4, int *num_v6, int *error,
-    int limit, int *bad_addr)
+    unsigned int *totaddr,
+    unsigned int *num_v4, unsigned int *num_v6, int *error,
+    unsigned int limit, int *bad_addr)
 {
        struct sockaddr *sa;
        struct sctp_tcb *stcb = NULL;
-       size_t incr, at, i;
+       unsigned int incr, at, i;
 
        at = incr = 0;
        sa = addr;
-
        *error = *num_v6 = *num_v4 = 0;
        /* account and validate addresses */
-       for (i = 0; i < (size_t)*totaddr; i++) {
+       for (i = 0; i < *totaddr; i++) {
                switch (sa->sa_family) {
 #ifdef INET
                case AF_INET:
-                       (*num_v4) += 1;
-                       incr = sizeof(struct sockaddr_in);
                        if (sa->sa_len != incr) {
                                SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTPUTIL, EINVAL);
                                *error = EINVAL;
                                *bad_addr = 1;
                                return (NULL);
                        }
+                       (*num_v4) += 1;
+                       incr = (unsigned int)sizeof(struct sockaddr_in);
                        break;
 #endif
 #ifdef INET6
@@ -6491,14 +6497,14 @@ sctp_connectx_helper_find(struct sctp_in
                                        *bad_addr = 1;
                                        return (NULL);
                                }
-                               (*num_v6) += 1;
-                               incr = sizeof(struct sockaddr_in6);
                                if (sa->sa_len != incr) {
                                        SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTPUTIL, EINVAL);
                                        *error = EINVAL;
                                        *bad_addr = 1;
                                        return (NULL);
                                }
+                               (*num_v6) += 1;
+                               incr = (unsigned int)sizeof(struct 
sockaddr_in6);
                                break;
                        }
 #endif
@@ -6507,7 +6513,7 @@ sctp_connectx_helper_find(struct sctp_in
                        /* we are done */
                        break;
                }
-               if (i == (size_t)*totaddr) {
+               if (i == *totaddr) {
                        break;
                }
                SCTP_INP_INCR_REF(inp);
@@ -6518,7 +6524,7 @@ sctp_connectx_helper_find(struct sctp_in
                } else {
                        SCTP_INP_DECR_REF(inp);
                }
-               if ((at + incr) > (size_t)limit) {
+               if ((at + incr) > limit) {
                        *totaddr = i;
                        break;
                }

Modified: head/sys/netinet/sctputil.h
==============================================================================
--- head/sys/netinet/sctputil.h Sun Mar 27 08:21:17 2016        (r297311)
+++ head/sys/netinet/sctputil.h Sun Mar 27 10:04:25 2016        (r297312)
@@ -220,7 +220,8 @@ sctp_connectx_helper_add(struct sctp_tcb
 
 struct sctp_tcb *
 sctp_connectx_helper_find(struct sctp_inpcb *inp, struct sockaddr *addr,
-    int *totaddr, int *num_v4, int *num_v6, int *error, int limit, int 
*bad_addr);
+    unsigned int *totaddr, unsigned int *num_v4, unsigned int *num_v6,
+    int *error, unsigned int limit, int *bad_addr);
 
 int sctp_is_there_an_abort_here(struct mbuf *, int, uint32_t *);
 
@@ -376,7 +377,7 @@ void sctp_log_closing(struct sctp_inpcb 
 
 void sctp_log_lock(struct sctp_inpcb *inp, struct sctp_tcb *stcb, uint8_t 
from);
 void sctp_log_maxburst(struct sctp_tcb *stcb, struct sctp_nets *, int, int, 
uint8_t);
-void sctp_log_block(uint8_t, struct sctp_association *, int);
+void sctp_log_block(uint8_t, struct sctp_association *, size_t);
 void sctp_log_rwnd(uint8_t, uint32_t, uint32_t, uint32_t);
 void sctp_log_rwnd_set(uint8_t, uint32_t, uint32_t, uint32_t, uint32_t);
 int sctp_fill_stat_log(void *, size_t *);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to