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"

Reply via email to