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"

Reply via email to