sctp: delete the nested flexible array peer_init
authorXin Long <lucien.xin@gmail.com>
Wed, 19 Apr 2023 15:16:31 +0000 (11:16 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 Apr 2023 07:19:30 +0000 (08:19 +0100)
This patch deletes the flexible-array peer_init[] from the structure
sctp_cookie to avoid some sparse warnings:

  # make C=2 CF="-Wflexible-array-nested" M=./net/sctp/
  net/sctp/sm_make_chunk.c: note: in included file (through include/net/sctp/sctp.h):
  ./include/net/sctp/structs.h:1588:28: warning: nested flexible array
  ./include/net/sctp/structs.h:343:28: warning: nested flexible array

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sctp/structs.h
net/sctp/associola.c
net/sctp/sm_make_chunk.c
net/sctp/sm_statefuns.c

index 070c945..5c72d18 100644 (file)
@@ -332,7 +332,7 @@ struct sctp_cookie {
         * the association TCB is re-constructed from the cookie.
         */
        __u32 raw_addr_list_len;
-       struct sctp_init_chunk peer_init[];
+       /* struct sctp_init_chunk peer_init[]; */
 };
 
 
index 63ba555..7965291 100644 (file)
@@ -1597,9 +1597,10 @@ int sctp_assoc_set_bind_addr_from_cookie(struct sctp_association *asoc,
                                         struct sctp_cookie *cookie,
                                         gfp_t gfp)
 {
-       int var_size2 = ntohs(cookie->peer_init->chunk_hdr.length);
+       struct sctp_init_chunk *peer_init = (struct sctp_init_chunk *)(cookie + 1);
+       int var_size2 = ntohs(peer_init->chunk_hdr.length);
        int var_size3 = cookie->raw_addr_list_len;
-       __u8 *raw = (__u8 *)cookie->peer_init + var_size2;
+       __u8 *raw = (__u8 *)peer_init + var_size2;
 
        return sctp_raw_to_bind_addrs(&asoc->base.bind_addr, raw, var_size3,
                                      asoc->ep->base.bind_addr.port, gfp);
index 4dbbbc2..08527d8 100644 (file)
@@ -1707,11 +1707,11 @@ static struct sctp_cookie_param *sctp_pack_cookie(
                                         ktime_get_real());
 
        /* Copy the peer's init packet.  */
-       memcpy(&cookie->c.peer_init[0], init_chunk->chunk_hdr,
+       memcpy(cookie + 1, init_chunk->chunk_hdr,
               ntohs(init_chunk->chunk_hdr->length));
 
        /* Copy the raw local address list of the association. */
-       memcpy((__u8 *)&cookie->c.peer_init[0] +
+       memcpy((__u8 *)(cookie + 1) +
               ntohs(init_chunk->chunk_hdr->length), raw_addrs, addrs_len);
 
        if (sctp_sk(ep->base.sk)->hmac) {
index 8d0cfd6..7b8eb73 100644 (file)
@@ -794,8 +794,7 @@ enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net,
        /* This is a brand-new association, so these are not yet side
         * effects--it is safe to run them here.
         */
-       peer_init = &chunk->subh.cookie_hdr->c.peer_init[0];
-
+       peer_init = (struct sctp_init_chunk *)(chunk->subh.cookie_hdr + 1);
        if (!sctp_process_init(new_asoc, chunk,
                               &chunk->subh.cookie_hdr->c.peer_addr,
                               peer_init, GFP_ATOMIC))
@@ -1869,8 +1868,7 @@ static enum sctp_disposition sctp_sf_do_dupcook_a(
        /* new_asoc is a brand-new association, so these are not yet
         * side effects--it is safe to run them here.
         */
-       peer_init = &chunk->subh.cookie_hdr->c.peer_init[0];
-
+       peer_init = (struct sctp_init_chunk *)(chunk->subh.cookie_hdr + 1);
        if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), peer_init,
                               GFP_ATOMIC))
                goto nomem;
@@ -1990,7 +1988,7 @@ static enum sctp_disposition sctp_sf_do_dupcook_b(
        /* new_asoc is a brand-new association, so these are not yet
         * side effects--it is safe to run them here.
         */
-       peer_init = &chunk->subh.cookie_hdr->c.peer_init[0];
+       peer_init = (struct sctp_init_chunk *)(chunk->subh.cookie_hdr + 1);
        if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), peer_init,
                               GFP_ATOMIC))
                goto nomem;