|
@@ -208,7 +208,8 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
|
|
|
sp = sctp_sk(asoc->base.sk);
|
|
|
num_types = sp->pf->supported_addrs(sp, types);
|
|
|
|
|
|
- chunksize = sizeof(init) + addrs_len + SCTP_SAT_LEN(num_types);
|
|
|
+ chunksize = sizeof(init) + addrs_len;
|
|
|
+ chunksize += WORD_ROUND(SCTP_SAT_LEN(num_types));
|
|
|
chunksize += sizeof(ecap_param);
|
|
|
|
|
|
if (sctp_prsctp_enable)
|
|
@@ -238,14 +239,14 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
|
|
|
/* Add HMACS parameter length if any were defined */
|
|
|
auth_hmacs = (sctp_paramhdr_t *)asoc->c.auth_hmacs;
|
|
|
if (auth_hmacs->length)
|
|
|
- chunksize += ntohs(auth_hmacs->length);
|
|
|
+ chunksize += WORD_ROUND(ntohs(auth_hmacs->length));
|
|
|
else
|
|
|
auth_hmacs = NULL;
|
|
|
|
|
|
/* Add CHUNKS parameter length */
|
|
|
auth_chunks = (sctp_paramhdr_t *)asoc->c.auth_chunks;
|
|
|
if (auth_chunks->length)
|
|
|
- chunksize += ntohs(auth_chunks->length);
|
|
|
+ chunksize += WORD_ROUND(ntohs(auth_chunks->length));
|
|
|
else
|
|
|
auth_chunks = NULL;
|
|
|
|
|
@@ -255,7 +256,8 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
|
|
|
|
|
|
/* If we have any extensions to report, account for that */
|
|
|
if (num_ext)
|
|
|
- chunksize += sizeof(sctp_supported_ext_param_t) + num_ext;
|
|
|
+ chunksize += WORD_ROUND(sizeof(sctp_supported_ext_param_t) +
|
|
|
+ num_ext);
|
|
|
|
|
|
/* RFC 2960 3.3.2 Initiation (INIT) (1)
|
|
|
*
|
|
@@ -397,13 +399,13 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
|
|
|
|
|
|
auth_hmacs = (sctp_paramhdr_t *)asoc->c.auth_hmacs;
|
|
|
if (auth_hmacs->length)
|
|
|
- chunksize += ntohs(auth_hmacs->length);
|
|
|
+ chunksize += WORD_ROUND(ntohs(auth_hmacs->length));
|
|
|
else
|
|
|
auth_hmacs = NULL;
|
|
|
|
|
|
auth_chunks = (sctp_paramhdr_t *)asoc->c.auth_chunks;
|
|
|
if (auth_chunks->length)
|
|
|
- chunksize += ntohs(auth_chunks->length);
|
|
|
+ chunksize += WORD_ROUND(ntohs(auth_chunks->length));
|
|
|
else
|
|
|
auth_chunks = NULL;
|
|
|
|
|
@@ -412,7 +414,8 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
|
|
|
}
|
|
|
|
|
|
if (num_ext)
|
|
|
- chunksize += sizeof(sctp_supported_ext_param_t) + num_ext;
|
|
|
+ chunksize += WORD_ROUND(sizeof(sctp_supported_ext_param_t) +
|
|
|
+ num_ext);
|
|
|
|
|
|
/* Now allocate and fill out the chunk. */
|
|
|
retval = sctp_make_chunk(asoc, SCTP_CID_INIT_ACK, 0, chunksize);
|