On Mon, Jan 10, 2022 at 10:38:59AM +0100, Philippe Mathieu-Daudé wrote:
> Cc'ing Richard & Eric for dubious compiler warning.
>
> On 1/9/22 21:57, Philipp Tomsich wrote:
> > Compiling with gcc version 11.2.0 (Ubuntu 11.2.0-13ubuntu1) results in
> > a (spurious) warning:
> >
> > In function ‘dump_receive_iov’,
> > inlined from ‘filter_dump_receive_iov’ at ../net/dump.c:157:5:
> > ../net/dump.c:89:9: error: ‘writev’ specified size 18446744073709551600
> > exceeds maximum object size 9223372036854775807 [-Werror=stringop-overflow=]
> > 89 | if (writev(s->fd, dumpiov, cnt + 1) != sizeof(hdr) + caplen) {
> > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > In file included from /home/ptomsich/qemu/include/qemu/osdep.h:108,
> > from ../net/dump.c:25:
> > ../net/dump.c: In function ‘filter_dump_receive_iov’:
> > /usr/include/x86_64-linux-gnu/sys/uio.h:52:16: note: in a call to
> > function ‘writev’ declared with attribute ‘read_only (2, 3)’
> > 52 | extern ssize_t writev (int __fd, const struct iovec *__iovec, int
> > __count)
> > | ^~~~~~
> > cc1: all warnings being treated as errors
That is an odd error message.
> >
> > This change helps that version of GCC to understand what is going on
> > and suppresses this warning.
> >
> > Signed-off-by: Philipp Tomsich <[email protected]>
> >
> > ---
> >
> > net/dump.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/net/dump.c b/net/dump.c
> > index a07ba62401..c32d3bf4e6 100644
> > --- a/net/dump.c
> > +++ b/net/dump.c
> > @@ -86,7 +86,7 @@ static ssize_t dump_receive_iov(DumpState *s, const
> > struct iovec *iov, int cnt)
> > dumpiov[0].iov_len = sizeof(hdr);
> > cnt = iov_copy(&dumpiov[1], cnt, iov, cnt, 0, caplen);
> >
> > - if (writev(s->fd, dumpiov, cnt + 1) != sizeof(hdr) + caplen) {
> > + if (writev(s->fd, &dumpiov[0], cnt + 1) != sizeof(hdr) + caplen) {
This change is safe; it results in the same pointer. Obviously, the
latter spelling is able to provide the compiler with a bit more type
information about the pointer, so that it no longer assumes a pointer
to an unbounded array, so if it silences the warning, I see no
downside in including it whether or not gcc is also patched to avoid
creating a spurious warning in the first place.
Reviewed-by: Eric Blake <[email protected]>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org