Commit 9789c1c6 authored by Xin Long's avatar Xin Long Committed by David S. Miller

sctp: delete the nested flexible array variable

This patch deletes the flexible-array variable[] from the structure
sctp_sackhdr and sctp_errhdr to avoid some sparse warnings:

  # make C=2 CF="-Wflexible-array-nested" M=./net/sctp/
  net/sctp/sm_statefuns.c: note: in included file (through include/net/sctp/structs.h, include/net/sctp/sctp.h):
  ./include/linux/sctp.h:451:28: warning: nested flexible array
  ./include/linux/sctp.h:393:29: warning: nested flexible array
Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 73175a04
...@@ -385,7 +385,7 @@ struct sctp_sackhdr { ...@@ -385,7 +385,7 @@ struct sctp_sackhdr {
__be32 a_rwnd; __be32 a_rwnd;
__be16 num_gap_ack_blocks; __be16 num_gap_ack_blocks;
__be16 num_dup_tsns; __be16 num_dup_tsns;
union sctp_sack_variable variable[]; /* union sctp_sack_variable variable[]; */
}; };
struct sctp_sack_chunk { struct sctp_sack_chunk {
...@@ -443,7 +443,7 @@ struct sctp_shutdown_chunk { ...@@ -443,7 +443,7 @@ struct sctp_shutdown_chunk {
struct sctp_errhdr { struct sctp_errhdr {
__be16 cause; __be16 cause;
__be16 length; __be16 length;
__u8 variable[]; /* __u8 variable[]; */
}; };
struct sctp_operr_chunk { struct sctp_operr_chunk {
......
...@@ -1231,7 +1231,7 @@ static void sctp_sack_update_unack_data(struct sctp_association *assoc, ...@@ -1231,7 +1231,7 @@ static void sctp_sack_update_unack_data(struct sctp_association *assoc,
unack_data = assoc->next_tsn - assoc->ctsn_ack_point - 1; unack_data = assoc->next_tsn - assoc->ctsn_ack_point - 1;
frags = sack->variable; frags = (union sctp_sack_variable *)(sack + 1);
for (i = 0; i < ntohs(sack->num_gap_ack_blocks); i++) { for (i = 0; i < ntohs(sack->num_gap_ack_blocks); i++) {
unack_data -= ((ntohs(frags[i].gab.end) - unack_data -= ((ntohs(frags[i].gab.end) -
ntohs(frags[i].gab.start) + 1)); ntohs(frags[i].gab.start) + 1));
...@@ -1252,7 +1252,6 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk) ...@@ -1252,7 +1252,6 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk)
struct sctp_transport *transport; struct sctp_transport *transport;
struct sctp_chunk *tchunk = NULL; struct sctp_chunk *tchunk = NULL;
struct list_head *lchunk, *transport_list, *temp; struct list_head *lchunk, *transport_list, *temp;
union sctp_sack_variable *frags = sack->variable;
__u32 sack_ctsn, ctsn, tsn; __u32 sack_ctsn, ctsn, tsn;
__u32 highest_tsn, highest_new_tsn; __u32 highest_tsn, highest_new_tsn;
__u32 sack_a_rwnd; __u32 sack_a_rwnd;
...@@ -1313,8 +1312,12 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk) ...@@ -1313,8 +1312,12 @@ int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk)
/* Get the highest TSN in the sack. */ /* Get the highest TSN in the sack. */
highest_tsn = sack_ctsn; highest_tsn = sack_ctsn;
if (gap_ack_blocks) if (gap_ack_blocks) {
union sctp_sack_variable *frags =
(union sctp_sack_variable *)(sack + 1);
highest_tsn += ntohs(frags[gap_ack_blocks - 1].gab.end); highest_tsn += ntohs(frags[gap_ack_blocks - 1].gab.end);
}
if (TSN_lt(asoc->highest_sacked, highest_tsn)) if (TSN_lt(asoc->highest_sacked, highest_tsn))
asoc->highest_sacked = highest_tsn; asoc->highest_sacked = highest_tsn;
...@@ -1789,7 +1792,7 @@ static int sctp_acked(struct sctp_sackhdr *sack, __u32 tsn) ...@@ -1789,7 +1792,7 @@ static int sctp_acked(struct sctp_sackhdr *sack, __u32 tsn)
* Block are assumed to have been received correctly. * Block are assumed to have been received correctly.
*/ */
frags = sack->variable; frags = (union sctp_sack_variable *)(sack + 1);
blocks = ntohs(sack->num_gap_ack_blocks); blocks = ntohs(sack->num_gap_ack_blocks);
tsn_offset = tsn - ctsn; tsn_offset = tsn - ctsn;
for (i = 0; i < blocks; ++i) { for (i = 0; i < blocks; ++i) {
......
...@@ -984,8 +984,7 @@ static void sctp_cmd_process_operr(struct sctp_cmd_seq *cmds, ...@@ -984,8 +984,7 @@ static void sctp_cmd_process_operr(struct sctp_cmd_seq *cmds,
{ {
struct sctp_chunkhdr *unk_chunk_hdr; struct sctp_chunkhdr *unk_chunk_hdr;
unk_chunk_hdr = (struct sctp_chunkhdr *) unk_chunk_hdr = (struct sctp_chunkhdr *)(err_hdr + 1);
err_hdr->variable;
switch (unk_chunk_hdr->type) { switch (unk_chunk_hdr->type) {
/* ADDIP 4.1 A9) If the peer responds to an ASCONF with /* ADDIP 4.1 A9) If the peer responds to an ASCONF with
* an ERROR chunk reporting that it did not recognized * an ERROR chunk reporting that it did not recognized
......
...@@ -1337,7 +1337,7 @@ static int sctp_sf_send_restart_abort(struct net *net, union sctp_addr *ssa, ...@@ -1337,7 +1337,7 @@ static int sctp_sf_send_restart_abort(struct net *net, union sctp_addr *ssa,
* throughout the code today. * throughout the code today.
*/ */
errhdr = (struct sctp_errhdr *)buffer; errhdr = (struct sctp_errhdr *)buffer;
addrparm = (union sctp_addr_param *)errhdr->variable; addrparm = (union sctp_addr_param *)(errhdr + 1);
/* Copy into a parm format. */ /* Copy into a parm format. */
len = af->to_addr_param(ssa, addrparm); len = af->to_addr_param(ssa, addrparm);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment