On 12/18/18 11:51 AM, Philippe Mathieu-Daudé wrote: > GCC 8 added a -Wstringop-truncation warning: > > The -Wstringop-truncation warning added in GCC 8.0 via r254630 for > bug 81117 is specifically intended to highlight likely unintended > uses of the strncpy function that truncate the terminating NUL > character from the source string. > > This new warning leads to compilation failures: > > CC block/sheepdog.o > qemu/block/sheepdog.c: In function 'find_vdi_name': > qemu/block/sheepdog.c:1239:5: error: 'strncpy' specified bound 256 equals > destination size [-Werror=stringop-truncation] > strncpy(buf + SD_MAX_VDI_LEN, tag, SD_MAX_VDI_TAG_LEN); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > make: *** [qemu/rules.mak:69: block/sheepdog.o] Error 1 > > As described previous to the strncpy() calls, the use of strncpy() is > correct here: > > /* This pair of strncpy calls ensures that the buffer is zero-filled, > * which is desirable since we'll soon be sending those bytes, and > * don't want the send_req to read uninitialized data. > */ > strncpy(buf, filename, SD_MAX_VDI_LEN); > strncpy(buf + SD_MAX_VDI_LEN, tag, SD_MAX_VDI_TAG_LEN); > > Use the QEMU_NONSTRING attribute, since this array is intended to store > character arrays that do not necessarily contain a terminating NUL. > > Suggested-by: Michael S. Tsirkin <m...@redhat.com> > Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> > --- > block/sheepdog.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Eric Blake <ebl...@redhat.com> > > diff --git a/block/sheepdog.c b/block/sheepdog.c > index 0125df9d49..d4ad6b119d 100644 > --- a/block/sheepdog.c > +++ b/block/sheepdog.c > @@ -1224,7 +1224,7 @@ static int find_vdi_name(BDRVSheepdogState *s, const > char *filename, > SheepdogVdiReq hdr; > SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr; > unsigned int wlen, rlen = 0; > - char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN]; > + QEMU_NONSTRING char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN]; > > fd = connect_to_sdog(s, errp); > if (fd < 0) { > -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1803872 Title: gcc 8.2 reports stringop-truncation when building qemu Status in QEMU: New Bug description: QEMU 3.0 block/sheepdog.c: In function 'find_vdi_name': block/sheepdog.c:1239:5: error: 'strncpy' specified bound 256 equals destination size [-Werror=stringop-truncation] strncpy(buf + SD_MAX_VDI_LEN, tag, SD_MAX_VDI_TAG_LEN); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If this is the intended behavior, please suppress the warning. For example: #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wstringop-truncation" strncpy(buf + SD_MAX_VDI_LEN, tag, SD_MAX_VDI_TAG_LEN); #pragma GCC diagnostic pop This also happens on other sources, for example hw/acpi/core.c, so another option is to suppress it globally on CFLAGS (-Wno-stringop- truncation) To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1803872/+subscriptions