On Wed, Apr 16, 2025 at 11:03:51AM +0200, Kory Maincent wrote: > On Tue, 15 Apr 2025 18:02:15 -0700 > Kees Cook <k...@kernel.org> 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?
I decided that the code churn wasn't worth it. Perhaps in a follow-up patch if folks want to see the removal of the explicit memcpy() uses? -- Kees Cook