summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/sctp6_usrreq.c
diff options
context:
space:
mode:
authorrrs <rrs@FreeBSD.org>2007-05-09 13:30:06 +0000
committerrrs <rrs@FreeBSD.org>2007-05-09 13:30:06 +0000
commit8531fb6bb28e0296c5987623d099b38a08ba798a (patch)
tree5730ba11ad6842199a46899208f93c4ec22a9469 /sys/netinet6/sctp6_usrreq.c
parentc7d189e526c975d0e57e55dcc56d1c34421395a0 (diff)
downloadFreeBSD-src-8531fb6bb28e0296c5987623d099b38a08ba798a.zip
FreeBSD-src-8531fb6bb28e0296c5987623d099b38a08ba798a.tar.gz
Two major items here:
- All printf that was surrounded by #ifdef SCTP_DEBUG moves to a macro that does all of this. This removes all printfs from the code and makes the code more portable and easier to read. - Static Analysis (cisco) - found a few bugs, but mostly we add checks for NULL pointers and such to make the tool happy. We now pass the Cisco SA tools checks except for where it does not understand tailq/lists. We still need to look at the coverity tools output too (this is like the cisco SA tool) and see if it wants us to fix any other items. Hopefully this will be the last major churn in the code other than bug fixes.
Diffstat (limited to 'sys/netinet6/sctp6_usrreq.c')
-rw-r--r--sys/netinet6/sctp6_usrreq.c42
1 files changed, 18 insertions, 24 deletions
diff --git a/sys/netinet6/sctp6_usrreq.c b/sys/netinet6/sctp6_usrreq.c
index f92ab7c..58fb8a5 100644
--- a/sys/netinet6/sctp6_usrreq.c
+++ b/sys/netinet6/sctp6_usrreq.c
@@ -109,12 +109,8 @@ sctp6_input(i_pak, offp, proto)
#endif /* NFAITH defined and > 0 */
SCTP_STAT_INCR(sctps_recvpackets);
SCTP_STAT_INCR_COUNTER64(sctps_inpackets);
-#ifdef SCTP_DEBUG
- if (sctp_debug_on & SCTP_DEBUG_INPUT1) {
- printf("V6 input gets a packet iphlen:%d pktlen:%d\n", iphlen,
- SCTP_HEADER_LEN((*i_pak)));
- }
-#endif
+ SCTPDBG(SCTP_DEBUG_INPUT1, "V6 input gets a packet iphlen:%d pktlen:%d\n",
+ iphlen, SCTP_HEADER_LEN((*i_pak)));
if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
/* No multi-cast support in SCTP */
goto bad;
@@ -141,13 +137,8 @@ sctp6_input(i_pak, offp, proto)
sh->checksum = 0; /* prepare for calc */
calc_check = sctp_calculate_sum(m, &mlen, iphlen);
if (calc_check != check) {
-#ifdef SCTP_DEBUG
- if (sctp_debug_on & SCTP_DEBUG_INPUT1) {
- printf("Bad CSUM on SCTP packet calc_check:%x check:%x m:%p mlen:%d iphlen:%d\n",
- calc_check, check, m,
- mlen, iphlen);
- }
-#endif
+ SCTPDBG(SCTP_DEBUG_INPUT1, "Bad CSUM on SCTP packet calc_check:%x check:%x m:%p mlen:%d iphlen:%d\n",
+ calc_check, check, m, mlen, iphlen);
stcb = sctp_findassociation_addr(m, iphlen, offset - sizeof(*ch),
sh, ch, &in6p, &net, vrf_id);
/* in6p's ref-count increased && stcb locked */
@@ -185,7 +176,10 @@ sctp_skip_csum:
init_chk = (struct sctp_init_chunk *)sctp_m_getptr(m,
iphlen + sizeof(*sh), sizeof(*init_chk),
(uint8_t *) & chunk_buf);
- sh->v_tag = init_chk->init.initiate_tag;
+ if (init_chk)
+ sh->v_tag = init_chk->init.initiate_tag;
+ else
+ sh->v_tag = 0;
}
if (ch->chunk_type == SCTP_SHUTDOWN_ACK) {
sctp_send_shutdown_complete2(m, iphlen, sh, vrf_id,
@@ -238,9 +232,9 @@ sctp_skip_csum:
return IPPROTO_DONE;
bad:
- if (stcb)
+ if (stcb) {
SCTP_TCB_UNLOCK(stcb);
-
+ }
if ((in6p) && refcount_up) {
/* reduce ref-count */
SCTP_INP_WLOCK(in6p);
@@ -249,9 +243,6 @@ bad:
}
if (m)
sctp_m_freem(m);
- /* For BSD/MAC this does nothing */
- SCTP_DETACH_HEADER_FROM_CHAIN(*i_pak);
- SCTP_RELEASE_HEADER(*i_pak);
return IPPROTO_DONE;
}
@@ -327,8 +318,9 @@ sctp6_notify_mbuf(struct sctp_inpcb *inp,
}
sctp_timer_start(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, NULL);
out:
- if (stcb)
+ if (stcb) {
SCTP_TCB_UNLOCK(stcb);
+ }
}
@@ -889,7 +881,7 @@ connected_type:
/* now what about control */
if (control) {
if (inp->control) {
- printf("huh? control set?\n");
+ SCTP_PRINTF("huh? control set?\n");
SCTP_RELEASE_PKT(inp->control);
inp->control = NULL;
}
@@ -1003,8 +995,9 @@ sctp6_connect(struct socket *so, struct sockaddr *addr, struct thread *p)
/* Now do we connect? */
if (inp->sctp_flags & SCTP_PCB_FLAGS_CONNECTED) {
stcb = LIST_FIRST(&inp->sctp_asoc_list);
- if (stcb)
+ if (stcb) {
SCTP_TCB_UNLOCK(stcb);
+ }
SCTP_INP_RUNLOCK(inp);
} else {
SCTP_INP_RUNLOCK(inp);
@@ -1038,7 +1031,7 @@ sctp6_connect(struct socket *so, struct sockaddr *addr, struct thread *p)
soisconnecting(so);
}
stcb->asoc.state = SCTP_STATE_COOKIE_WAIT;
- SCTP_GETTIME_TIMEVAL(&stcb->asoc.time_entered);
+ (void)SCTP_GETTIME_TIMEVAL(&stcb->asoc.time_entered);
/* initialize authentication parameters for the assoc */
sctp_initialize_auth_params(inp, stcb);
@@ -1174,8 +1167,9 @@ sctp6_peeraddr(struct socket *so, struct sockaddr **addr)
}
SCTP_INP_RLOCK(inp);
stcb = LIST_FIRST(&inp->sctp_asoc_list);
- if (stcb)
+ if (stcb) {
SCTP_TCB_LOCK(stcb);
+ }
SCTP_INP_RUNLOCK(inp);
if (stcb == NULL) {
SCTP_FREE_SONAME(sin6);
OpenPOWER on IntegriCloud