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