[PATCH] tools/perf/tests: Fix compilation error with strncpy in tests/tool_pmu

Athira Rajeev atrajeev at linux.vnet.ibm.com
Thu Oct 17 05:23:10 AEDT 2024



> On 16 Oct 2024, at 8:36 PM, Ian Rogers <irogers at google.com> wrote:
> 
> On Wed, Oct 16, 2024 at 5:30 AM Athira Rajeev
> <atrajeev at linux.vnet.ibm.com> wrote:
>> 
>> 
>> 
>>> On 14 Oct 2024, at 10:56 PM, Namhyung Kim <namhyung at kernel.org> wrote:
>>> 
>>> Hello Athira,
>>> 
>>> On Sun, Oct 13, 2024 at 11:07:42PM +0530, Athira Rajeev wrote:
>>>> perf fails to compile on systems with GCC version11
>>>> as below:
>>>> 
>>>> In file included from /usr/include/string.h:519,
>>>>                from /home/athir/perf-tools-next/tools/include/linux/bitmap.h:5,
>>>>                from /home/athir/perf-tools-next/tools/perf/util/pmu.h:5,
>>>>                from /home/athir/perf-tools-next/tools/perf/util/evsel.h:14,
>>>>                from /home/athir/perf-tools-next/tools/perf/util/evlist.h:14,
>>>>                from tests/tool_pmu.c:3:
>>>> In function ‘strncpy’,
>>>>   inlined from ‘do_test’ at tests/tool_pmu.c:25:3:
>>>> /usr/include/bits/string_fortified.h:95:10: error: ‘__builtin_strncpy’ specified bound 128 equals destination size [-Werror=stringop-truncation]
>>>>  95 |   return __builtin___strncpy_chk (__dest, __src, __len,
>>>>     |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>>  96 |                                   __glibc_objsize (__dest));
>>>>     |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~
>>>> 
>>>> The compile error is from strncpy refernce in do_test:
>>>> strncpy(str, tool_pmu__event_to_str(ev), sizeof(str));
>>>> 
>>>> This behaviour is not observed with GCC version 8, but observed
>>>> with GCC version 11 . This is message from gcc for detecting
>>>> truncation while using strncpu. Use snprintf instead of strncpy
>>>> here to be safe.
>>>> 
>>>> Signed-off-by: Athira Rajeev <atrajeev at linux.vnet.ibm.com>
>>> 
>>> I found this issue now and thanks for the quick fix.  I will push to
>>> perf-tools-next soon.
>>> 
>>> Thanks,
>>> Namhyung
>>> 
>> 
>> Sure
>> 
>> Thanks Namhyung for pulling in the change
>> 
>> Athira
> 
> Thanks for the fixes. As this is test code I don't think performance,
> style, etc. matter much. The GCC strncpy warnings are annoying imo,
> I'm not sure it makes sense for them to be enabled. I see in the
> kernel lots of "sizeof(foo)-1" as a workaround. strlcpy looks like a
> better alternative but it gets a checkpatch warning as in the kernel
> strscpy is preferred. Perhaps we should create a strscpy shim.
> 

IIUC, strscpy is defined in kernel source and is currently not used in tools side.

Ian,
Your point here is that we can create an interface in tools side so that we can later safely use strscpy in cases like this ?

Thanks
Athira

> Thanks,
> Ian
> 
>>>> ---
>>>> tools/perf/tests/tool_pmu.c | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>> 
>>>> diff --git a/tools/perf/tests/tool_pmu.c b/tools/perf/tests/tool_pmu.c
>>>> index 94d0dd8fd3cb..297cc8c55579 100644
>>>> --- a/tools/perf/tests/tool_pmu.c
>>>> +++ b/tools/perf/tests/tool_pmu.c
>>>> @@ -22,7 +22,7 @@ static int do_test(enum tool_pmu_event ev, bool with_pmu)
>>>> if (with_pmu)
>>>> snprintf(str, sizeof(str), "tool/%s/", tool_pmu__event_to_str(ev));
>>>> else
>>>> - strncpy(str, tool_pmu__event_to_str(ev), sizeof(str));
>>>> + snprintf(str, sizeof(str), "%s", tool_pmu__event_to_str(ev));
>>>> 
>>>> parse_events_error__init(&err);
>>>> ret = parse_events(evlist, str, &err);
>>>> --
>>>> 2.43.5




More information about the Linuxppc-dev mailing list