[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] tests/cpu-policy: fix format-overflow warning by null terminating strings



On Tue, 2019-07-30 at 17:23 +0100, Andrew Cooper wrote:
> On 30/07/2019 16:51, Jan Beulich wrote:
> > On 25.07.2019 02:53, christopher.w.clark@xxxxxxxxx wrote:
> > > From: Christopher Clark <christopher.w.clark@xxxxxxxxx>
> > > 
> > > gcc 9.1.0 reports:
> > > 
> > > > test-cpu-policy.c:64:18: error: '%.12s' directive argument is
> > > > not a nul-terminated string [-Werror=format-overflow=]
> > > >    64 |             fail("  Test '%.12s', expected vendor %u,
> > > > got %u\n",
> > > >       |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > > > ~~~~~~~~
> > > > test-cpu-policy.c:20:12: note: in definition of macro 'fail'
> > > >    20 |     printf(fmt, ##__VA_ARGS__);                 \
> > > >       |            ^~~
> > > > test-cpu-policy.c:64:27: note: format string is defined here
> > > >    64 |             fail("  Test '%.12s', expected vendor %u,
> > > > got %u\n",
> > > >       |                           ^~~~~
> > > > test-cpu-policy.c:44:7: note: referenced argument declared here
> > > >    44 |     } tests[] = {
> > > >       |       ^~~~~
> > In order to possibly create a bug report against gcc I've tried
> > this:
> > 
> > #include <stdio.h>
> > 
> > struct s {
> >     char ac[12];
> >     int i;
> > };
> > 
> > void test(const struct s*ps) {
> >     printf("'%.12s'\n", ps->ac);
> > }
> > 
> > There's no warning here. Could you check whether the compiler warns
> > on
> > that simple test for you? If it does - are we talking about plain
> > upstream 9.1.0 (in which case I'd be really puzzled by the
> > difference
> > in behavior)?
> 
> CC Dario who also reported this build failure.
> 
Yep, this thread was on my radar already. But thanks! :-P

So, I'm using the following gcc (stock opensuse Tumbleweed provided
one):

dario@Palanthas:~/src/xen/xen.git> gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/9/lto-wrapper
OFFLOAD_TARGET_NAMES=hsa:nvptx-none
Target: x86_64-suse-linux
Configured with: ../configure --prefix=/usr --infodir=/usr/share/info 
--mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 
--enable-languages=c,c++,objc,fortran,obj-c++,ada,go,d 
--enable-offload-targets=hsa,nvptx-none=/usr/nvptx-none, --without-cuda-driver 
--disable-werror --with-gxx-include-dir=/usr/include/c++/9 --enable-ssp 
--disable-libssp --disable-libvtv --disable-cet --disable-libcc1 
--enable-plugin --with-bugurl=https://bugs.opensuse.org/ 
--with-pkgversion='SUSE Linux' --with-slibdir=/lib64 --with-system-zlib 
--enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-libphobos 
--enable-version-specific-runtime-libs --with-gcc-major-version-only 
--enable-linker-build-id --enable-linux-futex --enable-gnu-indirect-function 
--program-suffix=-9 --without-system-libunwind --enable-multilib 
--with-arch-32=x86-64 --with-tune=generic 
--with-build-config=bootstrap-lto-lean --enable-link-mutex 
--build=x86_64-suse-linux --host=x86_64-suse-linux
Thread model: posix
gcc version 9.1.1 20190703 [gcc-9-branch revision 273008] (SUSE Linux)


Jan's example above, seem to compile **without any warnings** for me as
well. If I add a main(), I can even get the code above to print the
content of the array.

And yet, building the tools without a patch like Christoper's one
(which was also what I was using locally, and raised to Andy), I get:

make[6]: Entering directory '/build/tools/tests/cpu-policy'
gcc  -m64 -DBUILD_ID -fno-strict-aliasing -std=gnu99 -Wall -Wstrict-prototypes 
-Wdeclaration-after-statement -Wno-unused-but-set-variable 
-Wno-unused-local-typedefs   -g3 -O0 -fno-omit-frame-pointer 
-D__XEN_INTERFACE_VERSION__=__XEN_LATEST_INTERFACE_VERSION__ -MMD -MF 
.test-cpu-policy.o.d -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE   -Werror 
-I/build/tools/tests/cpu-policy/../../../tools/include -D__XEN_TOOLS__ -O3   -c 
-o test-cpu-policy.o test-cpu-policy.c 
test-cpu-policy.c: In function 'main':
test-cpu-policy.c:64:18: error: '%.12s' directive argument is not a 
nul-terminated string [-Werror=format-overflow=]
   64 |             fail("  Test '%.12s', expected vendor %u, got %u\n",
      |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test-cpu-policy.c:20:12: note: in definition of macro 'fail'
   20 |     printf(fmt, ##__VA_ARGS__);                 \
      |            ^~~
test-cpu-policy.c:64:27: note: format string is defined here
   64 |             fail("  Test '%.12s', expected vendor %u, got %u\n",
      |                           ^~~~~
test-cpu-policy.c:44:7: note: referenced argument declared here
   44 |     } tests[] = {
      |       ^~~~~

I'm happy to do more tests.

Regards
-- 
Dario Faggioli, Ph.D
http://about.me/dario.faggioli
Virtualization Software Engineer
SUSE Labs, SUSE https://www.suse.com/
-------------------------------------------------------------------
<<This happens because _I_ choose it to happen!>> (Raistlin Majere)

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.