From 1b77b4778bf4ea247d4e18d1694d8dc2d3d1d150 Mon Sep 17 00:00:00 2001 From: t00fcxen Date: Sun, 7 Sep 2014 17:12:07 +0000 Subject: Sync with Mavericks sources: Further cleanups. Thanks to Patrick Laimbock for reporting another warning issue. git-svn-id: http://sctp-refimpl.googlecode.com/svn/trunk/KERN/usrsctp/usrsctplib@9002 9df1edf5-d72c-5b5f-11c0-5f5209eb73f7 --- netinet/sctp_asconf.c | 50 +++++++++++++++++++------------------------------- netinet/sctp_input.c | 11 ++++------- 2 files changed, 23 insertions(+), 38 deletions(-) diff --git a/netinet/sctp_asconf.c b/netinet/sctp_asconf.c index 3bbe144..a0d5cee 100755 --- a/netinet/sctp_asconf.c +++ b/netinet/sctp_asconf.c @@ -32,7 +32,7 @@ #ifdef __FreeBSD__ #include -__FBSDID("$FreeBSD: head/sys/netinet/sctp_asconf.c 271221 2014-09-07 09:06:26Z tuexen $"); +__FBSDID("$FreeBSD: head/sys/netinet/sctp_asconf.c 271228 2014-09-07 17:07:19Z tuexen $"); #endif #include @@ -2788,15 +2788,13 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, struct sctp_paramhdr tmp_param, *ph; uint16_t plen, ptype; struct sctp_ifa *sctp_ifa; + union sctp_sockstore store; #ifdef INET6 struct sctp_ipv6addr_param addr6_store; - struct sockaddr_in6 sin6; #endif #ifdef INET struct sctp_ipv4addr_param addr4_store; - struct sockaddr_in sin; #endif - struct sockaddr *sa; uint32_t vrf_id; SCTPDBG(SCTP_DEBUG_ASCONF2, "processing init-ack addresses\n"); @@ -2809,25 +2807,6 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, if ((offset + sizeof(struct sctp_paramhdr)) > length) { return; } - /* init the addresses */ -#ifdef INET6 - bzero(&sin6, sizeof(sin6)); - sin6.sin6_family = AF_INET6; -#ifdef HAVE_SIN6_LEN - sin6.sin6_len = sizeof(sin6); -#endif - sin6.sin6_port = stcb->rport; -#endif - -#ifdef INET - bzero(&sin, sizeof(sin)); - sin.sin_family = AF_INET; -#ifdef HAVE_SIN_LEN - sin.sin_len = sizeof(sin); -#endif - sin.sin_port = stcb->rport; -#endif - /* go through the addresses in the init-ack */ ph = (struct sctp_paramhdr *) sctp_m_getptr(m, offset, sizeof(struct sctp_paramhdr), @@ -2850,9 +2829,13 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, a6p == NULL) { return; } - memcpy(&sin6.sin6_addr, a6p->addr, - sizeof(struct in6_addr)); - sa = (struct sockaddr *)&sin6; + memset(&store, 0, sizeof(union sctp_sockstore)); + store.sin6.sin6_family = AF_INET6; +#ifdef HAVE_SIN6_LEN + store.sin6.sin6_len = sizeof(struct sockaddr_in6); +#endif + store.sin6.sin6_port = stcb->rport; + memcpy(&store.sin6.sin6_addr, a6p->addr, sizeof(struct in6_addr)); break; } #endif @@ -2869,8 +2852,13 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, a4p == NULL) { return; } - sin.sin_addr.s_addr = a4p->addr; - sa = (struct sockaddr *)&sin; + memset(&store, 0, sizeof(union sctp_sockstore)); + store.sin.sin_family = AF_INET; +#ifdef HAVE_SIN_LEN + store.sin.sin_len = sizeof(struct sockaddr_in); +#endif + store.sin.sin_port = stcb->rport; + store.sin.sin_addr.s_addr = a4p->addr; break; } #endif @@ -2884,7 +2872,7 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, } else { vrf_id = SCTP_DEFAULT_VRFID; } - sctp_ifa = sctp_find_ifa_by_addr(sa, vrf_id, + sctp_ifa = sctp_find_ifa_by_addr(&store.sa, vrf_id, SCTP_ADDR_NOT_LOCKED); if (sctp_ifa == NULL) { /* address doesn't exist anymore */ @@ -2895,7 +2883,7 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, SCTP_PCB_FLAGS_DO_ASCONF)) && stcb->asoc.asconf_supported) { /* queue an ASCONF DEL_IP_ADDRESS */ - status = sctp_asconf_queue_sa_delete(stcb, sa); + status = sctp_asconf_queue_sa_delete(stcb, &store.sa); /* * if queued ok, and in correct state, send * out the ASCONF. @@ -2929,7 +2917,7 @@ next_addr: if ((offset + sizeof(struct sctp_paramhdr)) > length) return; ph = (struct sctp_paramhdr *)sctp_m_getptr(m, offset, - sizeof(struct sctp_paramhdr), (uint8_t *) & tmp_param); + sizeof(struct sctp_paramhdr), (uint8_t *)&tmp_param); } /* while */ } diff --git a/netinet/sctp_input.c b/netinet/sctp_input.c index 41b1077..8173f29 100755 --- a/netinet/sctp_input.c +++ b/netinet/sctp_input.c @@ -32,7 +32,7 @@ #ifdef __FreeBSD__ #include -__FBSDID("$FreeBSD: head/sys/netinet/sctp_input.c 271221 2014-09-07 09:06:26Z tuexen $"); +__FBSDID("$FreeBSD: head/sys/netinet/sctp_input.c 271228 2014-09-07 17:07:19Z tuexen $"); #endif #include @@ -629,8 +629,7 @@ sctp_handle_heartbeat_ack(struct sctp_heartbeat_chunk *cp, store.sin6.sin6_len = cp->heartbeat.hb_info.addr_len; #endif store.sin6.sin6_port = stcb->rport; - memcpy(&store.sin6.sin6_addr, cp->heartbeat.hb_info.address, - sizeof(store.sin6.sin6_addr)); + memcpy(&store.sin6.sin6_addr, cp->heartbeat.hb_info.address, sizeof(struct in6_addr)); } else { return; } @@ -644,8 +643,7 @@ sctp_handle_heartbeat_ack(struct sctp_heartbeat_chunk *cp, store.sconn.sconn_len = cp->heartbeat.hb_info.addr_len; #endif store.sconn.sconn_port = stcb->rport; - memcpy(&store.sconn.sconn_addr, cp->heartbeat.hb_info.address, - sizeof(store.sconn.sconn_addr)); + memcpy(&store.sconn.sconn_addr, cp->heartbeat.hb_info.address, sizeof(void *)); } else { return; } @@ -2332,8 +2330,7 @@ sctp_process_cookie_new(struct mbuf *m, int iphlen, int offset, store.sin6.sin6_len = sizeof(struct sockaddr_in6); #endif store.sin6.sin6_scope_id = cookie->scope_id; - memcpy(&store.sin6.sin6_addr, cookie->laddress, - sizeof(store.sin6.sin6_addr)); + memcpy(&store.sin6.sin6_addr, cookie->laddress, sizeof(struct in6_addr)); break; #endif #if defined(__Userspace__) -- cgit v1.2.3