On Nov 27, 2011, at 9:24 PM, Alexander Best wrote: > On Sun Nov 27 11, Michael Tuexen wrote: >> Author: tuexen >> Date: Sun Nov 27 17:51:13 2011 >> New Revision: 228031 >> URL: http://svn.freebsd.org/changeset/base/228031 >> >> Log: >> Fix a warning reported by arundel@. >> Fix a bug where the parameter length of a supported address types >> parameter is set to a wrong value if the kernel is built with >> with either INET or INET6, but not both. >> >> MFC after: 3 days. >> >> Modified: >> head/sys/netinet/sctp_header.h >> head/sys/netinet/sctp_output.c >> >> Modified: head/sys/netinet/sctp_header.h >> ============================================================================== >> --- head/sys/netinet/sctp_header.h Sun Nov 27 17:05:26 2011 >> (r228030) >> +++ head/sys/netinet/sctp_header.h Sun Nov 27 17:51:13 2011 >> (r228031) >> @@ -81,8 +81,7 @@ struct sctp_host_name_param { >> /* supported address type */ >> struct sctp_supported_addr_param { >> struct sctp_paramhdr ph;/* type=SCTP_SUPPORTED_ADDRTYPE */ >> - uint16_t addr_type[SCTP_ARRAY_MIN_LEN]; /* array of supported address > > since SCTP_ARRAY_MIN_LEN is only used in one other place, i think we can > remove > it entirely (see the attached patch). > > cheers. > alex > >> - * types */ >> + uint16_t addr_type[2]; /* array of supported address types */ >> } SCTP_PACKED; >> >> /* ECN parameter */ >> >> Modified: head/sys/netinet/sctp_output.c >> ============================================================================== >> --- head/sys/netinet/sctp_output.c Sun Nov 27 17:05:26 2011 >> (r228030) >> +++ head/sys/netinet/sctp_output.c Sun Nov 27 17:51:13 2011 >> (r228031) >> @@ -4680,24 +4680,24 @@ sctp_send_initiate(struct sctp_inpcb *in >> #ifdef INET6 >> #ifdef INET >> /* we support 2 types: IPv4/IPv6 */ >> - sup_addr->ph.param_length = htons(sizeof(*sup_addr) + sizeof(uint16_t)); >> + sup_addr->ph.param_length = htons(sizeof(struct sctp_paramhdr) + 2 * >> sizeof(uint16_t)); >> sup_addr->addr_type[0] = htons(SCTP_IPV4_ADDRESS); >> sup_addr->addr_type[1] = htons(SCTP_IPV6_ADDRESS); >> #else >> /* we support 1 type: IPv6 */ >> - sup_addr->ph.param_length = htons(sizeof(*sup_addr) + sizeof(uint8_t)); >> + sup_addr->ph.param_length = htons(sizeof(struct sctp_paramhdr) + >> sizeof(uint16_t)); >> sup_addr->addr_type[0] = htons(SCTP_IPV6_ADDRESS); >> sup_addr->addr_type[1] = htons(0); /* this is the padding */ >> #endif >> #else >> /* we support 1 type: IPv4 */ >> - sup_addr->ph.param_length = htons(sizeof(*sup_addr) + sizeof(uint8_t)); >> + sup_addr->ph.param_length = htons(sizeof(struct sctp_paramhdr) + >> sizeof(uint16_t)); >> sup_addr->addr_type[0] = htons(SCTP_IPV4_ADDRESS); >> sup_addr->addr_type[1] = htons(0); /* this is the padding */ >> #endif >> - SCTP_BUF_LEN(m) += sizeof(*sup_addr) + sizeof(uint16_t); >> + SCTP_BUF_LEN(m) += sizeof(struct sctp_supported_addr_param); >> /* adaptation layer indication parameter */ >> - ali = (struct sctp_adaptation_layer_indication *)((caddr_t)sup_addr + >> sizeof(*sup_addr) + sizeof(uint16_t)); >> + ali = (struct sctp_adaptation_layer_indication *)((caddr_t)sup_addr + >> sizeof(struct sctp_supported_addr_param)); >> ali->ph.param_type = htons(SCTP_ULP_ADAPTATION); >> ali->ph.param_length = htons(sizeof(*ali)); >> ali->indication = ntohl(inp->sctp_ep.adaptation_layer_indicator); > <sctp_header.h.diff> yes, that is possible...
Best regards Michael _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"