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);
Index: sys/netinet/sctp_header.h =================================================================== --- sys/netinet/sctp_header.h (revision 228040) +++ sys/netinet/sctp_header.h (working copy) @@ -66,11 +66,10 @@ uint32_t time; /* time in ms to extend cookie */ } SCTP_PACKED; -#define SCTP_ARRAY_MIN_LEN 1 /* Host Name Address */ struct sctp_host_name_param { struct sctp_paramhdr ph;/* type=SCTP_HOSTNAME_ADDRESS */ - char name[SCTP_ARRAY_MIN_LEN]; /* host name */ + char name[1]; /* host name */ } SCTP_PACKED; /*
_______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"