提交 3c918704 编写于 作者: X Xin Long 提交者: David S. Miller

sctp: remove the typedef sctp_paramhdr_t

This patch is to remove the typedef sctp_paramhdr_t, and replace
with struct sctp_paramhdr in the places where it's using this
typedef.

It is also to fix some indents and  use sizeof(variable) instead
of sizeof(type).
Signed-off-by: NXin Long <lucien.xin@gmail.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 ec431c2c
...@@ -162,10 +162,10 @@ enum { SCTP_CHUNK_FLAG_T = 0x01 }; ...@@ -162,10 +162,10 @@ enum { SCTP_CHUNK_FLAG_T = 0x01 };
* Section 3.2.1 Optional/Variable-length Parmaeter Format. * Section 3.2.1 Optional/Variable-length Parmaeter Format.
*/ */
typedef struct sctp_paramhdr { struct sctp_paramhdr {
__be16 type; __be16 type;
__be16 length; __be16 length;
} sctp_paramhdr_t; };
typedef enum { typedef enum {
...@@ -274,37 +274,37 @@ typedef struct sctp_init_chunk { ...@@ -274,37 +274,37 @@ typedef struct sctp_init_chunk {
/* Section 3.3.2.1. IPv4 Address Parameter (5) */ /* Section 3.3.2.1. IPv4 Address Parameter (5) */
typedef struct sctp_ipv4addr_param { typedef struct sctp_ipv4addr_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
struct in_addr addr; struct in_addr addr;
} sctp_ipv4addr_param_t; } sctp_ipv4addr_param_t;
/* Section 3.3.2.1. IPv6 Address Parameter (6) */ /* Section 3.3.2.1. IPv6 Address Parameter (6) */
typedef struct sctp_ipv6addr_param { typedef struct sctp_ipv6addr_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
struct in6_addr addr; struct in6_addr addr;
} sctp_ipv6addr_param_t; } sctp_ipv6addr_param_t;
/* Section 3.3.2.1 Cookie Preservative (9) */ /* Section 3.3.2.1 Cookie Preservative (9) */
typedef struct sctp_cookie_preserve_param { typedef struct sctp_cookie_preserve_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__be32 lifespan_increment; __be32 lifespan_increment;
} sctp_cookie_preserve_param_t; } sctp_cookie_preserve_param_t;
/* Section 3.3.2.1 Host Name Address (11) */ /* Section 3.3.2.1 Host Name Address (11) */
typedef struct sctp_hostname_param { typedef struct sctp_hostname_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
uint8_t hostname[0]; uint8_t hostname[0];
} sctp_hostname_param_t; } sctp_hostname_param_t;
/* Section 3.3.2.1 Supported Address Types (12) */ /* Section 3.3.2.1 Supported Address Types (12) */
typedef struct sctp_supported_addrs_param { typedef struct sctp_supported_addrs_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__be16 types[0]; __be16 types[0];
} sctp_supported_addrs_param_t; } sctp_supported_addrs_param_t;
/* Appendix A. ECN Capable (32768) */ /* Appendix A. ECN Capable (32768) */
typedef struct sctp_ecn_capable_param { typedef struct sctp_ecn_capable_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
} sctp_ecn_capable_param_t; } sctp_ecn_capable_param_t;
/* ADDIP Section 3.2.6 Adaptation Layer Indication */ /* ADDIP Section 3.2.6 Adaptation Layer Indication */
...@@ -321,19 +321,19 @@ typedef struct sctp_supported_ext_param { ...@@ -321,19 +321,19 @@ typedef struct sctp_supported_ext_param {
/* AUTH Section 3.1 Random */ /* AUTH Section 3.1 Random */
typedef struct sctp_random_param { typedef struct sctp_random_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__u8 random_val[0]; __u8 random_val[0];
} sctp_random_param_t; } sctp_random_param_t;
/* AUTH Section 3.2 Chunk List */ /* AUTH Section 3.2 Chunk List */
typedef struct sctp_chunks_param { typedef struct sctp_chunks_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__u8 chunks[0]; __u8 chunks[0];
} sctp_chunks_param_t; } sctp_chunks_param_t;
/* AUTH Section 3.3 HMAC Algorithm */ /* AUTH Section 3.3 HMAC Algorithm */
typedef struct sctp_hmac_algo_param { typedef struct sctp_hmac_algo_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__be16 hmac_ids[0]; __be16 hmac_ids[0];
} sctp_hmac_algo_param_t; } sctp_hmac_algo_param_t;
...@@ -345,14 +345,14 @@ typedef sctp_init_chunk_t sctp_initack_chunk_t; ...@@ -345,14 +345,14 @@ typedef sctp_init_chunk_t sctp_initack_chunk_t;
/* Section 3.3.3.1 State Cookie (7) */ /* Section 3.3.3.1 State Cookie (7) */
typedef struct sctp_cookie_param { typedef struct sctp_cookie_param {
sctp_paramhdr_t p; struct sctp_paramhdr p;
__u8 body[0]; __u8 body[0];
} sctp_cookie_param_t; } sctp_cookie_param_t;
/* Section 3.3.3.1 Unrecognized Parameters (8) */ /* Section 3.3.3.1 Unrecognized Parameters (8) */
typedef struct sctp_unrecognized_param { typedef struct sctp_unrecognized_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
sctp_paramhdr_t unrecognized; struct sctp_paramhdr unrecognized;
} sctp_unrecognized_param_t; } sctp_unrecognized_param_t;
...@@ -399,7 +399,7 @@ typedef struct sctp_sack_chunk { ...@@ -399,7 +399,7 @@ typedef struct sctp_sack_chunk {
*/ */
typedef struct sctp_heartbeathdr { typedef struct sctp_heartbeathdr {
sctp_paramhdr_t info; struct sctp_paramhdr info;
} sctp_heartbeathdr_t; } sctp_heartbeathdr_t;
typedef struct sctp_heartbeat_chunk { typedef struct sctp_heartbeat_chunk {
...@@ -639,7 +639,7 @@ struct sctp_fwdtsn_chunk { ...@@ -639,7 +639,7 @@ struct sctp_fwdtsn_chunk {
* report status of ASCONF processing. * report status of ASCONF processing.
*/ */
typedef struct sctp_addip_param { typedef struct sctp_addip_param {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__be32 crr_id; __be32 crr_id;
} sctp_addip_param_t; } sctp_addip_param_t;
...@@ -724,7 +724,7 @@ struct sctp_reconf_chunk { ...@@ -724,7 +724,7 @@ struct sctp_reconf_chunk {
}; };
struct sctp_strreset_outreq { struct sctp_strreset_outreq {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__u32 request_seq; __u32 request_seq;
__u32 response_seq; __u32 response_seq;
__u32 send_reset_at_tsn; __u32 send_reset_at_tsn;
...@@ -732,18 +732,18 @@ struct sctp_strreset_outreq { ...@@ -732,18 +732,18 @@ struct sctp_strreset_outreq {
}; };
struct sctp_strreset_inreq { struct sctp_strreset_inreq {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__u32 request_seq; __u32 request_seq;
__u16 list_of_streams[0]; __u16 list_of_streams[0];
}; };
struct sctp_strreset_tsnreq { struct sctp_strreset_tsnreq {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__u32 request_seq; __u32 request_seq;
}; };
struct sctp_strreset_addstrm { struct sctp_strreset_addstrm {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__u32 request_seq; __u32 request_seq;
__u16 number_of_streams; __u16 number_of_streams;
__u16 reserved; __u16 reserved;
...@@ -760,13 +760,13 @@ enum { ...@@ -760,13 +760,13 @@ enum {
}; };
struct sctp_strreset_resp { struct sctp_strreset_resp {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__u32 response_seq; __u32 response_seq;
__u32 result; __u32 result;
}; };
struct sctp_strreset_resptsn { struct sctp_strreset_resptsn {
sctp_paramhdr_t param_hdr; struct sctp_paramhdr param_hdr;
__u32 response_seq; __u32 response_seq;
__u32 result; __u32 result;
__u32 senders_next_tsn; __u32 senders_next_tsn;
......
...@@ -470,7 +470,7 @@ _sctp_walk_params((pos), (chunk), ntohs((chunk)->chunk_hdr.length), member) ...@@ -470,7 +470,7 @@ _sctp_walk_params((pos), (chunk), ntohs((chunk)->chunk_hdr.length), member)
#define _sctp_walk_params(pos, chunk, end, member)\ #define _sctp_walk_params(pos, chunk, end, member)\
for (pos.v = chunk->member;\ for (pos.v = chunk->member;\
pos.v <= (void *)chunk + end - ntohs(pos.p->length) &&\ pos.v <= (void *)chunk + end - ntohs(pos.p->length) &&\
ntohs(pos.p->length) >= sizeof(sctp_paramhdr_t);\ ntohs(pos.p->length) >= sizeof(struct sctp_paramhdr);\
pos.v += SCTP_PAD4(ntohs(pos.p->length))) pos.v += SCTP_PAD4(ntohs(pos.p->length)))
#define sctp_walk_errors(err, chunk_hdr)\ #define sctp_walk_errors(err, chunk_hdr)\
......
...@@ -310,9 +310,10 @@ struct sctp_cookie { ...@@ -310,9 +310,10 @@ struct sctp_cookie {
__u32 adaptation_ind; __u32 adaptation_ind;
__u8 auth_random[sizeof(sctp_paramhdr_t) + SCTP_AUTH_RANDOM_LENGTH]; __u8 auth_random[sizeof(struct sctp_paramhdr) +
SCTP_AUTH_RANDOM_LENGTH];
__u8 auth_hmacs[SCTP_AUTH_NUM_HMACS * sizeof(__u16) + 2]; __u8 auth_hmacs[SCTP_AUTH_NUM_HMACS * sizeof(__u16) + 2];
__u8 auth_chunks[sizeof(sctp_paramhdr_t) + SCTP_AUTH_MAX_CHUNKS]; __u8 auth_chunks[sizeof(struct sctp_paramhdr) + SCTP_AUTH_MAX_CHUNKS];
/* This is a shim for my peer's INIT packet, followed by /* This is a shim for my peer's INIT packet, followed by
* a copy of the raw address list of the association. * a copy of the raw address list of the association.
......
...@@ -71,7 +71,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a ...@@ -71,7 +71,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
{ {
struct net *net = sock_net(sk); struct net *net = sock_net(sk);
struct sctp_sock *sp; struct sctp_sock *sp;
sctp_paramhdr_t *p; struct sctp_paramhdr *p;
int i; int i;
/* Retrieve the SCTP per socket area. */ /* Retrieve the SCTP per socket area. */
...@@ -284,9 +284,9 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a ...@@ -284,9 +284,9 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
ntohs(ep->auth_chunk_list->param_hdr.length)); ntohs(ep->auth_chunk_list->param_hdr.length));
/* Get the AUTH random number for this association */ /* Get the AUTH random number for this association */
p = (sctp_paramhdr_t *)asoc->c.auth_random; p = (struct sctp_paramhdr *)asoc->c.auth_random;
p->type = SCTP_PARAM_RANDOM; p->type = SCTP_PARAM_RANDOM;
p->length = htons(sizeof(sctp_paramhdr_t) + SCTP_AUTH_RANDOM_LENGTH); p->length = htons(sizeof(*p) + SCTP_AUTH_RANDOM_LENGTH);
get_random_bytes(p+1, SCTP_AUTH_RANDOM_LENGTH); get_random_bytes(p+1, SCTP_AUTH_RANDOM_LENGTH);
return asoc; return asoc;
......
...@@ -538,7 +538,8 @@ struct sctp_hmac *sctp_auth_asoc_get_hmac(const struct sctp_association *asoc) ...@@ -538,7 +538,8 @@ struct sctp_hmac *sctp_auth_asoc_get_hmac(const struct sctp_association *asoc)
if (!hmacs) if (!hmacs)
return NULL; return NULL;
n_elt = (ntohs(hmacs->param_hdr.length) - sizeof(sctp_paramhdr_t)) >> 1; n_elt = (ntohs(hmacs->param_hdr.length) -
sizeof(struct sctp_paramhdr)) >> 1;
for (i = 0; i < n_elt; i++) { for (i = 0; i < n_elt; i++) {
id = ntohs(hmacs->hmac_ids[i]); id = ntohs(hmacs->hmac_ids[i]);
...@@ -589,7 +590,8 @@ int sctp_auth_asoc_verify_hmac_id(const struct sctp_association *asoc, ...@@ -589,7 +590,8 @@ int sctp_auth_asoc_verify_hmac_id(const struct sctp_association *asoc,
return 0; return 0;
hmacs = (struct sctp_hmac_algo_param *)asoc->c.auth_hmacs; hmacs = (struct sctp_hmac_algo_param *)asoc->c.auth_hmacs;
n_elt = (ntohs(hmacs->param_hdr.length) - sizeof(sctp_paramhdr_t)) >> 1; n_elt = (ntohs(hmacs->param_hdr.length) -
sizeof(struct sctp_paramhdr)) >> 1;
return __sctp_auth_find_hmacid(hmacs->hmac_ids, n_elt, hmac_id); return __sctp_auth_find_hmacid(hmacs->hmac_ids, n_elt, hmac_id);
} }
...@@ -612,8 +614,8 @@ void sctp_auth_asoc_set_default_hmac(struct sctp_association *asoc, ...@@ -612,8 +614,8 @@ void sctp_auth_asoc_set_default_hmac(struct sctp_association *asoc,
if (asoc->default_hmac_id) if (asoc->default_hmac_id)
return; return;
n_params = (ntohs(hmacs->param_hdr.length) n_params = (ntohs(hmacs->param_hdr.length) -
- sizeof(sctp_paramhdr_t)) >> 1; sizeof(struct sctp_paramhdr)) >> 1;
ep = asoc->ep; ep = asoc->ep;
for (i = 0; i < n_params; i++) { for (i = 0; i < n_params; i++) {
id = ntohs(hmacs->hmac_ids[i]); id = ntohs(hmacs->hmac_ids[i]);
...@@ -641,7 +643,7 @@ static int __sctp_auth_cid(enum sctp_cid chunk, struct sctp_chunks_param *param) ...@@ -641,7 +643,7 @@ static int __sctp_auth_cid(enum sctp_cid chunk, struct sctp_chunks_param *param)
if (!param || param->param_hdr.length == 0) if (!param || param->param_hdr.length == 0)
return 0; return 0;
len = ntohs(param->param_hdr.length) - sizeof(sctp_paramhdr_t); len = ntohs(param->param_hdr.length) - sizeof(struct sctp_paramhdr);
/* SCTP-AUTH, Section 3.2 /* SCTP-AUTH, Section 3.2
* The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE and AUTH * The chunk types for INIT, INIT-ACK, SHUTDOWN-COMPLETE and AUTH
...@@ -775,7 +777,7 @@ int sctp_auth_ep_add_chunkid(struct sctp_endpoint *ep, __u8 chunk_id) ...@@ -775,7 +777,7 @@ int sctp_auth_ep_add_chunkid(struct sctp_endpoint *ep, __u8 chunk_id)
/* Check if we can add this chunk to the array */ /* Check if we can add this chunk to the array */
param_len = ntohs(p->param_hdr.length); param_len = ntohs(p->param_hdr.length);
nchunks = param_len - sizeof(sctp_paramhdr_t); nchunks = param_len - sizeof(struct sctp_paramhdr);
if (nchunks == SCTP_NUM_CHUNK_TYPES) if (nchunks == SCTP_NUM_CHUNK_TYPES)
return -EINVAL; return -EINVAL;
...@@ -812,9 +814,11 @@ int sctp_auth_ep_set_hmacs(struct sctp_endpoint *ep, ...@@ -812,9 +814,11 @@ int sctp_auth_ep_set_hmacs(struct sctp_endpoint *ep,
return -EINVAL; return -EINVAL;
for (i = 0; i < hmacs->shmac_num_idents; i++) for (i = 0; i < hmacs->shmac_num_idents; i++)
ep->auth_hmacs_list->hmac_ids[i] = htons(hmacs->shmac_idents[i]); ep->auth_hmacs_list->hmac_ids[i] =
ep->auth_hmacs_list->param_hdr.length = htons(sizeof(sctp_paramhdr_t) + htons(hmacs->shmac_idents[i]);
hmacs->shmac_num_idents * sizeof(__u16)); ep->auth_hmacs_list->param_hdr.length =
htons(sizeof(struct sctp_paramhdr) +
hmacs->shmac_num_idents * sizeof(__u16));
return 0; return 0;
} }
......
...@@ -90,12 +90,13 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep, ...@@ -90,12 +90,13 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
*/ */
auth_hmacs->param_hdr.type = SCTP_PARAM_HMAC_ALGO; auth_hmacs->param_hdr.type = SCTP_PARAM_HMAC_ALGO;
auth_hmacs->param_hdr.length = auth_hmacs->param_hdr.length =
htons(sizeof(sctp_paramhdr_t) + 2); htons(sizeof(struct sctp_paramhdr) + 2);
auth_hmacs->hmac_ids[0] = htons(SCTP_AUTH_HMAC_ID_SHA1); auth_hmacs->hmac_ids[0] = htons(SCTP_AUTH_HMAC_ID_SHA1);
/* Initialize the CHUNKS parameter */ /* Initialize the CHUNKS parameter */
auth_chunks->param_hdr.type = SCTP_PARAM_CHUNKS; auth_chunks->param_hdr.type = SCTP_PARAM_CHUNKS;
auth_chunks->param_hdr.length = htons(sizeof(sctp_paramhdr_t)); auth_chunks->param_hdr.length =
htons(sizeof(struct sctp_paramhdr));
/* If the Add-IP functionality is enabled, we must /* If the Add-IP functionality is enabled, we must
* authenticate, ASCONF and ASCONF-ACK chunks * authenticate, ASCONF and ASCONF-ACK chunks
...@@ -104,7 +105,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep, ...@@ -104,7 +105,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
auth_chunks->chunks[0] = SCTP_CID_ASCONF; auth_chunks->chunks[0] = SCTP_CID_ASCONF;
auth_chunks->chunks[1] = SCTP_CID_ASCONF_ACK; auth_chunks->chunks[1] = SCTP_CID_ASCONF_ACK;
auth_chunks->param_hdr.length = auth_chunks->param_hdr.length =
htons(sizeof(sctp_paramhdr_t) + 2); htons(sizeof(struct sctp_paramhdr) + 2);
} }
} }
......
...@@ -229,7 +229,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc, ...@@ -229,7 +229,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
sctp_supported_ext_param_t ext_param; sctp_supported_ext_param_t ext_param;
int num_ext = 0; int num_ext = 0;
__u8 extensions[3]; __u8 extensions[3];
sctp_paramhdr_t *auth_chunks = NULL, struct sctp_paramhdr *auth_chunks = NULL,
*auth_hmacs = NULL; *auth_hmacs = NULL;
/* RFC 2960 3.3.2 Initiation (INIT) (1) /* RFC 2960 3.3.2 Initiation (INIT) (1)
...@@ -286,14 +286,14 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc, ...@@ -286,14 +286,14 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
chunksize += sizeof(asoc->c.auth_random); chunksize += sizeof(asoc->c.auth_random);
/* Add HMACS parameter length if any were defined */ /* Add HMACS parameter length if any were defined */
auth_hmacs = (sctp_paramhdr_t *)asoc->c.auth_hmacs; auth_hmacs = (struct sctp_paramhdr *)asoc->c.auth_hmacs;
if (auth_hmacs->length) if (auth_hmacs->length)
chunksize += SCTP_PAD4(ntohs(auth_hmacs->length)); chunksize += SCTP_PAD4(ntohs(auth_hmacs->length));
else else
auth_hmacs = NULL; auth_hmacs = NULL;
/* Add CHUNKS parameter length */ /* Add CHUNKS parameter length */
auth_chunks = (sctp_paramhdr_t *)asoc->c.auth_chunks; auth_chunks = (struct sctp_paramhdr *)asoc->c.auth_chunks;
if (auth_chunks->length) if (auth_chunks->length)
chunksize += SCTP_PAD4(ntohs(auth_chunks->length)); chunksize += SCTP_PAD4(ntohs(auth_chunks->length));
else else
...@@ -397,7 +397,7 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc, ...@@ -397,7 +397,7 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
sctp_supported_ext_param_t ext_param; sctp_supported_ext_param_t ext_param;
int num_ext = 0; int num_ext = 0;
__u8 extensions[3]; __u8 extensions[3];
sctp_paramhdr_t *auth_chunks = NULL, struct sctp_paramhdr *auth_chunks = NULL,
*auth_hmacs = NULL, *auth_hmacs = NULL,
*auth_random = NULL; *auth_random = NULL;
...@@ -448,16 +448,16 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc, ...@@ -448,16 +448,16 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
chunksize += sizeof(aiparam); chunksize += sizeof(aiparam);
if (asoc->peer.auth_capable) { if (asoc->peer.auth_capable) {
auth_random = (sctp_paramhdr_t *)asoc->c.auth_random; auth_random = (struct sctp_paramhdr *)asoc->c.auth_random;
chunksize += ntohs(auth_random->length); chunksize += ntohs(auth_random->length);
auth_hmacs = (sctp_paramhdr_t *)asoc->c.auth_hmacs; auth_hmacs = (struct sctp_paramhdr *)asoc->c.auth_hmacs;
if (auth_hmacs->length) if (auth_hmacs->length)
chunksize += SCTP_PAD4(ntohs(auth_hmacs->length)); chunksize += SCTP_PAD4(ntohs(auth_hmacs->length));
else else
auth_hmacs = NULL; auth_hmacs = NULL;
auth_chunks = (sctp_paramhdr_t *)asoc->c.auth_chunks; auth_chunks = (struct sctp_paramhdr *)asoc->c.auth_chunks;
if (auth_chunks->length) if (auth_chunks->length)
chunksize += SCTP_PAD4(ntohs(auth_chunks->length)); chunksize += SCTP_PAD4(ntohs(auth_chunks->length));
else else
...@@ -1085,18 +1085,18 @@ struct sctp_chunk *sctp_make_abort_violation( ...@@ -1085,18 +1085,18 @@ struct sctp_chunk *sctp_make_abort_violation(
struct sctp_chunk *retval; struct sctp_chunk *retval;
struct sctp_paramhdr phdr; struct sctp_paramhdr phdr;
retval = sctp_make_abort(asoc, chunk, sizeof(sctp_errhdr_t) + paylen retval = sctp_make_abort(asoc, chunk, sizeof(sctp_errhdr_t) + paylen +
+ sizeof(sctp_paramhdr_t)); sizeof(phdr));
if (!retval) if (!retval)
goto end; goto end;
sctp_init_cause(retval, SCTP_ERROR_PROTO_VIOLATION, paylen sctp_init_cause(retval, SCTP_ERROR_PROTO_VIOLATION, paylen +
+ sizeof(sctp_paramhdr_t)); sizeof(phdr));
phdr.type = htons(chunk->chunk_hdr->type); phdr.type = htons(chunk->chunk_hdr->type);
phdr.length = chunk->chunk_hdr->length; phdr.length = chunk->chunk_hdr->length;
sctp_addto_chunk(retval, paylen, payload); sctp_addto_chunk(retval, paylen, payload);
sctp_addto_param(retval, sizeof(sctp_paramhdr_t), &phdr); sctp_addto_param(retval, sizeof(phdr), &phdr);
end: end:
return retval; return retval;
...@@ -1110,16 +1110,16 @@ struct sctp_chunk *sctp_make_violation_paramlen( ...@@ -1110,16 +1110,16 @@ struct sctp_chunk *sctp_make_violation_paramlen(
struct sctp_chunk *retval; struct sctp_chunk *retval;
static const char error[] = "The following parameter had invalid length:"; static const char error[] = "The following parameter had invalid length:";
size_t payload_len = sizeof(error) + sizeof(sctp_errhdr_t) + size_t payload_len = sizeof(error) + sizeof(sctp_errhdr_t) +
sizeof(sctp_paramhdr_t); sizeof(*param);
retval = sctp_make_abort(asoc, chunk, payload_len); retval = sctp_make_abort(asoc, chunk, payload_len);
if (!retval) if (!retval)
goto nodata; goto nodata;
sctp_init_cause(retval, SCTP_ERROR_PROTO_VIOLATION, sctp_init_cause(retval, SCTP_ERROR_PROTO_VIOLATION,
sizeof(error) + sizeof(sctp_paramhdr_t)); sizeof(error) + sizeof(*param));
sctp_addto_chunk(retval, sizeof(error), error); sctp_addto_chunk(retval, sizeof(error), error);
sctp_addto_param(retval, sizeof(sctp_paramhdr_t), param); sctp_addto_param(retval, sizeof(*param), param);
nodata: nodata:
return retval; return retval;
...@@ -1614,7 +1614,7 @@ static sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep, ...@@ -1614,7 +1614,7 @@ static sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep,
/* Header size is static data prior to the actual cookie, including /* Header size is static data prior to the actual cookie, including
* any padding. * any padding.
*/ */
headersize = sizeof(sctp_paramhdr_t) + headersize = sizeof(struct sctp_paramhdr) +
(sizeof(struct sctp_signed_cookie) - (sizeof(struct sctp_signed_cookie) -
sizeof(struct sctp_cookie)); sizeof(struct sctp_cookie));
bodysize = sizeof(struct sctp_cookie) bodysize = sizeof(struct sctp_cookie)
...@@ -1975,7 +1975,7 @@ static int sctp_process_hn_param(const struct sctp_association *asoc, ...@@ -1975,7 +1975,7 @@ static int sctp_process_hn_param(const struct sctp_association *asoc,
static int sctp_verify_ext_param(struct net *net, union sctp_params param) static int sctp_verify_ext_param(struct net *net, union sctp_params param)
{ {
__u16 num_ext = ntohs(param.p->length) - sizeof(sctp_paramhdr_t); __u16 num_ext = ntohs(param.p->length) - sizeof(struct sctp_paramhdr);
int have_auth = 0; int have_auth = 0;
int have_asconf = 0; int have_asconf = 0;
int i; int i;
...@@ -2010,7 +2010,7 @@ static void sctp_process_ext_param(struct sctp_association *asoc, ...@@ -2010,7 +2010,7 @@ static void sctp_process_ext_param(struct sctp_association *asoc,
union sctp_params param) union sctp_params param)
{ {
struct net *net = sock_net(asoc->base.sk); struct net *net = sock_net(asoc->base.sk);
__u16 num_ext = ntohs(param.p->length) - sizeof(sctp_paramhdr_t); __u16 num_ext = ntohs(param.p->length) - sizeof(struct sctp_paramhdr);
int i; int i;
for (i = 0; i < num_ext; i++) { for (i = 0; i < num_ext; i++) {
...@@ -2180,7 +2180,7 @@ static sctp_ierror_t sctp_verify_param(struct net *net, ...@@ -2180,7 +2180,7 @@ static sctp_ierror_t sctp_verify_param(struct net *net,
* cause 'Protocol Violation'. * cause 'Protocol Violation'.
*/ */
if (SCTP_AUTH_RANDOM_LENGTH != if (SCTP_AUTH_RANDOM_LENGTH !=
ntohs(param.p->length) - sizeof(sctp_paramhdr_t)) { ntohs(param.p->length) - sizeof(struct sctp_paramhdr)) {
sctp_process_inv_paramlength(asoc, param.p, sctp_process_inv_paramlength(asoc, param.p,
chunk, err_chunk); chunk, err_chunk);
retval = SCTP_IERROR_ABORT; retval = SCTP_IERROR_ABORT;
...@@ -2208,7 +2208,8 @@ static sctp_ierror_t sctp_verify_param(struct net *net, ...@@ -2208,7 +2208,8 @@ static sctp_ierror_t sctp_verify_param(struct net *net,
goto fallthrough; goto fallthrough;
hmacs = (struct sctp_hmac_algo_param *)param.p; hmacs = (struct sctp_hmac_algo_param *)param.p;
n_elt = (ntohs(param.p->length) - sizeof(sctp_paramhdr_t)) >> 1; n_elt = (ntohs(param.p->length) -
sizeof(struct sctp_paramhdr)) >> 1;
/* SCTP-AUTH: Section 6.1 /* SCTP-AUTH: Section 6.1
* The HMAC algorithm based on SHA-1 MUST be supported and * The HMAC algorithm based on SHA-1 MUST be supported and
...@@ -2565,7 +2566,7 @@ static int sctp_process_param(struct sctp_association *asoc, ...@@ -2565,7 +2566,7 @@ static int sctp_process_param(struct sctp_association *asoc,
asoc->peer.ipv4_address = 1; asoc->peer.ipv4_address = 1;
/* Cycle through address types; avoid divide by 0. */ /* Cycle through address types; avoid divide by 0. */
sat = ntohs(param.p->length) - sizeof(sctp_paramhdr_t); sat = ntohs(param.p->length) - sizeof(struct sctp_paramhdr);
if (sat) if (sat)
sat /= sizeof(__u16); sat /= sizeof(__u16);
...@@ -2592,7 +2593,7 @@ static int sctp_process_param(struct sctp_association *asoc, ...@@ -2592,7 +2593,7 @@ static int sctp_process_param(struct sctp_association *asoc,
case SCTP_PARAM_STATE_COOKIE: case SCTP_PARAM_STATE_COOKIE:
asoc->peer.cookie_len = asoc->peer.cookie_len =
ntohs(param.p->length) - sizeof(sctp_paramhdr_t); ntohs(param.p->length) - sizeof(struct sctp_paramhdr);
asoc->peer.cookie = param.cookie->body; asoc->peer.cookie = param.cookie->body;
break; break;
...@@ -3176,7 +3177,7 @@ bool sctp_verify_asconf(const struct sctp_association *asoc, ...@@ -3176,7 +3177,7 @@ bool sctp_verify_asconf(const struct sctp_association *asoc,
return false; return false;
length = ntohs(param.addip->param_hdr.length); length = ntohs(param.addip->param_hdr.length);
if (length < sizeof(sctp_addip_param_t) + if (length < sizeof(sctp_addip_param_t) +
sizeof(sctp_paramhdr_t)) sizeof(**errp))
return false; return false;
break; break;
case SCTP_PARAM_SUCCESS_REPORT: case SCTP_PARAM_SUCCESS_REPORT:
......
...@@ -1081,7 +1081,7 @@ sctp_disposition_t sctp_sf_beat_8_3(struct net *net, ...@@ -1081,7 +1081,7 @@ sctp_disposition_t sctp_sf_beat_8_3(struct net *net,
void *arg, void *arg,
sctp_cmd_seq_t *commands) sctp_cmd_seq_t *commands)
{ {
sctp_paramhdr_t *param_hdr; struct sctp_paramhdr *param_hdr;
struct sctp_chunk *chunk = arg; struct sctp_chunk *chunk = arg;
struct sctp_chunk *reply; struct sctp_chunk *reply;
size_t paylen = 0; size_t paylen = 0;
...@@ -1098,8 +1098,8 @@ sctp_disposition_t sctp_sf_beat_8_3(struct net *net, ...@@ -1098,8 +1098,8 @@ sctp_disposition_t sctp_sf_beat_8_3(struct net *net,
* respond with a HEARTBEAT ACK that contains the Heartbeat * respond with a HEARTBEAT ACK that contains the Heartbeat
* Information field copied from the received HEARTBEAT chunk. * Information field copied from the received HEARTBEAT chunk.
*/ */
chunk->subh.hb_hdr = (sctp_heartbeathdr_t *) chunk->skb->data; chunk->subh.hb_hdr = (sctp_heartbeathdr_t *)chunk->skb->data;
param_hdr = (sctp_paramhdr_t *) chunk->subh.hb_hdr; param_hdr = (struct sctp_paramhdr *)chunk->subh.hb_hdr;
paylen = ntohs(chunk->chunk_hdr->length) - sizeof(struct sctp_chunkhdr); paylen = ntohs(chunk->chunk_hdr->length) - sizeof(struct sctp_chunkhdr);
if (ntohs(param_hdr->length) > paylen) if (ntohs(param_hdr->length) > paylen)
......
...@@ -6033,7 +6033,8 @@ static int sctp_getsockopt_hmac_ident(struct sock *sk, int len, ...@@ -6033,7 +6033,8 @@ static int sctp_getsockopt_hmac_ident(struct sock *sk, int len,
return -EACCES; return -EACCES;
hmacs = ep->auth_hmacs_list; hmacs = ep->auth_hmacs_list;
data_len = ntohs(hmacs->param_hdr.length) - sizeof(sctp_paramhdr_t); data_len = ntohs(hmacs->param_hdr.length) -
sizeof(struct sctp_paramhdr);
if (len < sizeof(struct sctp_hmacalgo) + data_len) if (len < sizeof(struct sctp_hmacalgo) + data_len)
return -EINVAL; return -EINVAL;
...@@ -6117,7 +6118,7 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len, ...@@ -6117,7 +6118,7 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
goto num; goto num;
/* See if the user provided enough room for all the data */ /* See if the user provided enough room for all the data */
num_chunks = ntohs(ch->param_hdr.length) - sizeof(sctp_paramhdr_t); num_chunks = ntohs(ch->param_hdr.length) - sizeof(struct sctp_paramhdr);
if (len < num_chunks) if (len < num_chunks)
return -EINVAL; return -EINVAL;
...@@ -6165,7 +6166,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len, ...@@ -6165,7 +6166,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
if (!ch) if (!ch)
goto num; goto num;
num_chunks = ntohs(ch->param_hdr.length) - sizeof(sctp_paramhdr_t); num_chunks = ntohs(ch->param_hdr.length) - sizeof(struct sctp_paramhdr);
if (len < sizeof(struct sctp_authchunks) + num_chunks) if (len < sizeof(struct sctp_authchunks) + num_chunks)
return -EINVAL; return -EINVAL;
......
...@@ -304,7 +304,7 @@ int sctp_send_add_streams(struct sctp_association *asoc, ...@@ -304,7 +304,7 @@ int sctp_send_add_streams(struct sctp_association *asoc,
return retval; return retval;
} }
static sctp_paramhdr_t *sctp_chunk_lookup_strreset_param( static struct sctp_paramhdr *sctp_chunk_lookup_strreset_param(
struct sctp_association *asoc, __u32 resp_seq, struct sctp_association *asoc, __u32 resp_seq,
__be16 type) __be16 type)
{ {
...@@ -749,7 +749,7 @@ struct sctp_chunk *sctp_process_strreset_resp( ...@@ -749,7 +749,7 @@ struct sctp_chunk *sctp_process_strreset_resp(
struct sctp_strreset_resp *resp = param.v; struct sctp_strreset_resp *resp = param.v;
struct sctp_transport *t; struct sctp_transport *t;
__u16 i, nums, flags = 0; __u16 i, nums, flags = 0;
sctp_paramhdr_t *req; struct sctp_paramhdr *req;
__u32 result; __u32 result;
req = sctp_chunk_lookup_strreset_param(asoc, resp->response_seq, 0); req = sctp_chunk_lookup_strreset_param(asoc, resp->response_seq, 0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册