On Tue, 15 Apr 2025 18:02:15 -0700 Kees Cook <[email protected]> wrote:
> Many drivers populate the stats buffer using C-String based APIs (e.g. > ethtool_sprintf() and ethtool_puts()), usually when building up the > list of stats individually (i.e. with a for() loop). This, however, > requires that the source strings be populated in such a way as to have > a terminating NUL byte in the source. > > Other drivers populate the stats buffer directly using one big memcpy() > of an entire array of strings. No NUL termination is needed here, as the > bytes are being directly passed through. Yet others will build up the > stats buffer individually, but also use memcpy(). This, too, does not > need NUL termination of the source strings. > > However, there are cases where the strings that populate the > source stats strings are exactly ETH_GSTRING_LEN long, and GCC > 15's -Wunterminated-string-initialization option complains that the > trailing NUL byte has been truncated. This situation is fine only if the > driver is using the memcpy() approach. If the C-String APIs are used, > the destination string name will have its final byte truncated by the > required trailing NUL byte applied by the C-string API. > > For drivers that are already using memcpy() but have initializers that > truncate the NUL terminator, mark their source strings as __nonstring to > silence the GCC warnings. Shouldn't we move on to ethtool_cpy in these drivers too to unify the code? Regards, -- Köry Maincent, Bootlin Embedded Linux and kernel engineering https://bootlin.com
