• Gustavo A. R. Silva's avatar
    net: fddi: skfp: smt: Replace one-element array with flexible-array member · 537a0c5c
    Gustavo A. R. Silva authored
    There is a regular need in the kernel to provide a way to declare having
    a dynamically sized set of trailing elements in a structure. Kernel code
    should always use “flexible array members”[1] for these cases. The older
    style of one-element or zero-length arrays should no longer be used[2].
    
    Refactor the code according to the use of flexible-array members in
    smt_sif_operation structure, instead of one-element arrays. Also, make
    use of the struct_size() helper instead of the open-coded version
    to calculate the size of the struct-with-flex-array. Additionally, make
    use of the typeof operator to properly determine the object type to be
    passed to macro smtod().
    
    Also, this helps the ongoing efforts to enable -Warray-bounds by fixing
    the following warnings:
    
      CC [M]  drivers/net/fddi/skfp/smt.o
    drivers/net/fddi/skfp/smt.c: In function ‘smt_send_sif_operation’:
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
          |                   ^~~
    drivers/net/fddi/skfp/smt.c:1084:30: warning: array subscript 1 is above array bounds of ‘struct smt_p_lem[1]’ [-Warray-bounds]
     1084 |    smt_fill_lem(smc,&sif->lem[i],i) ;
          |                      ~~~~~~~~^~~
    In file included from drivers/net/fddi/skfp/h/smc.h:42,
                     from drivers/net/fddi/skfp/smt.c:15:
    drivers/net/fddi/skfp/h/smt.h:767:19: note: while referencing ‘lem’
      767 |  struct smt_p_lem lem[1] ; /* phy lem status */
    
    [1] https://en.wikipedia.org/wiki/Flexible_array_member
    [2] https://www.kernel.org/doc/html/v5.10/process/deprecated.html#zero-length-and-one-element-arrays
    
    Link: https://github.com/KSPP/linux/issues/79
    Link: https://github.com/KSPP/linux/issues/109Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    537a0c5c
smt.h 22.7 KB