Menu

#7 error: '%s' directive output may be truncated

v1.0 (example)
closed
nobody
make (1)
5
2018-06-07
2018-06-01
Thomas P.
No

Due to changes on gcc, perfmon2 does not compile anymore on current systems:

Compiling for 'x86_64' target
Compiling for 'Linux' system
make[1]: Entering directory '/home/thomas/JKU/perfmon2-libpfm4/lib'
cc  -g -Wall -Werror -Wextra -Wno-unused-parameter -I. -I/home/thomas/JKU/perfmon2-libpfm4/lib/../include -DCONFIG_PFMLIB_DEBUG -DCONFIG_PFMLIB_OS_LINUX -D_REENTRANT -I. -fvisibility=hidden  -DCONFIG_PFMLIB_ARCH_X86 -DCONFIG_PFMLIB_ARCH_X86_64 -I. -c pfmlib_perf_event_pmu.c
pfmlib_perf_event_pmu.c: In function 'gen_tracepoint_table':
pfmlib_perf_event_pmu.c:354:36: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size between 0 and 4095 [-Werror=format-truncation=]
   snprintf(d2path, MAXPATHLEN, "%s/%s", debugfs_mnt, d1->d_name);
                                    ^~
pfmlib_perf_event_pmu.c:354:3: note: 'snprintf' output between 2 and 4352 bytes into a destination of size 4096
   snprintf(d2path, MAXPATHLEN, "%s/%s", debugfs_mnt, d1->d_name);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pfmlib_perf_event_pmu.c:404:58: error: '%s' directive output may be truncated writing up to 255 bytes into a region of size between 0 and 4095 [-Werror=format-truncation=]
                         snprintf(idpath, MAXPATHLEN, "%s/%s/id", d2path, d2->d_name);
                                                          ^~
pfmlib_perf_event_pmu.c:404:25: note: 'snprintf' output between 5 and 4355 bytes into a destination of size 4096
                         snprintf(idpath, MAXPATHLEN, "%s/%s/id", d2path, d2->d_name);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [/home/thomas/JKU/perfmon2-libpfm4/lib/../rules.mk:30: pfmlib_perf_event_pmu.o] Error 1
make[1]: Leaving directory '/home/thomas/JKU/perfmon2-libpfm4/lib'
make: *** [Makefile:49: all] Error 2
cc -v
Using built-in specs.
COLLECT_GCC=cc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/8.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --enable-multilib --disable-werror --enable-checking=release --enable-default-pie --enable-default-ssp
Thread model: posix
gcc version 8.1.0 (GCC)

It can be silenced by appending -Wno-format-truncation to the CFLAGS of the Makefiles located in ./lib/ and ./perf_examples/.

I'm running on an up-to-date Arch-Linux System

Discussion

  • William Cohen

    William Cohen - 2018-06-01

    Rather than disabling the gcc truncation check maybe have something like the attached patch to check the return values of snprintf to see if they are in the expected range.

     
  • seranian

    seranian - 2018-06-07
    • status: open --> closed
     

Log in to post a comment.