svn commit: r228031 - head/sys/netinet

Alexander Best arundel at freebsd.org
Sun Nov 27 20:24:51 UTC 2011


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 at .
>   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);
-------------- next part --------------
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;
 
 /*


More information about the svn-src-head mailing list