diff --git a/meson.build b/meson.build index 4c997ab6f7..580d5126fa 100644 --- a/meson.build +++ b/meson.build @@ -411,6 +411,9 @@ add_project_arguments(cc.get_supported_arguments(basic_disabled_warnings), langu add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c') add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c') +have = cc.has_argument('-Wzero-length-bounds') +conf.set10('HAVE_ZERO_LENGTH_BOUNDS', have) + if cc.compiles(''' #include #include diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c index 0cde87f5ac..25bc79eeea 100644 --- a/src/shared/ethtool-util.c +++ b/src/shared/ethtool-util.c @@ -256,8 +256,13 @@ int ethtool_get_permanent_macaddr(int *ethtool_fd, const char *ifname, struct et if (epaddr.addr.size != 6) return -EOPNOTSUPP; +#pragma GCC diagnostic push +#if HAVE_ZERO_LENGTH_BOUNDS +# pragma GCC diagnostic ignored "-Wzero-length-bounds" +#endif for (size_t i = 0; i < epaddr.addr.size; i++) ret->ether_addr_octet[i] = epaddr.addr.data[i]; +#pragma GCC diagnostic pop return 0; } @@ -485,7 +490,12 @@ static int get_stringset(int ethtool_fd, struct ifreq *ifr, int stringset_id, st if (!buffer.info.sset_mask) return -EINVAL; +#pragma GCC diagnostic push +#if HAVE_ZERO_LENGTH_BOUNDS +# pragma GCC diagnostic ignored "-Wzero-length-bounds" +#endif len = buffer.info.data[0]; +#pragma GCC diagnostic pop strings = malloc0(sizeof(struct ethtool_gstrings) + len * ETH_GSTRING_LEN); if (!strings)