Zero-length arrays as fake flexible arrays are deprecated and we are moving towards adopting C99 flexible-array members instead. Address the following warning found with GCC-13 and -fstrict-flex-arrays=3 enabled: net/ipv6/exthdrs.c: In function ‘fl6_update_dst’: net/ipv6/exthdrs.c:1393:28: warning: array subscript 0 is outside array bounds of ‘struct in6_addr[0]’ [-Warray-bounds=] 1393 | fl6->daddr = *((struct rt0_hdr *)opt->srcrt)->addr; | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from ./include/linux/ipv6.h:5, from ./include/linux/icmpv6.h:6, from net/ipv6/exthdrs.c:27: ./include/uapi/linux/ipv6.h:84:33: note: while referencing ‘addr’ 84 | struct in6_addr addr[0]; | ^~~~ net/ipv6/exthdrs.c: In function ‘ipv6_push_rthdr0.isra’: net/ipv6/exthdrs.c:1125:19: warning: array subscript <unknown> is outside array bounds of ‘struct in6_addr[0]’ [-Warray-bounds=] 1125 | phdr->addr[hops - 1] = **addr_p; | ~~~~~~~~~~^~~~~~~~~~ ./include/uapi/linux/ipv6.h:84:33: note: while referencing ‘addr’ 84 | struct in6_addr addr[0]; | ^~~~ This helps with the ongoing efforts to tighten the FORTIFY_SOURCE routines on memcpy() and help us make progress towards globally enabling -fstrict-flex-arrays=3 [1].
Showing the changes to include/uapi (1 of 1 file). Show all
Unified · Split
| @@ -81,7 +81,7 @@ struct ipv6_opt_hdr { · 80 unmodified lines | |||
| 81 | struct rt0_hdr { | 81 | struct rt0_hdr { |
| 82 | struct ipv6_rt_hdr rt_hdr; | 82 | struct ipv6_rt_hdr rt_hdr; |
| 83 | __u32 reserved; | 83 | __u32 reserved; |
| 84 | struct in6_addr addr[0]; | 84 | struct in6_addr addr[]; |
| 85 | 85 | ||
| 86 | #define rt0_type rt_hdr.type | 86 | #define rt0_type rt_hdr.type |
| 87 | }; | 87 | }; |