[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 2/5] block/sheepdog: Use QEMU_NONSTRING for n
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-devel] [PATCH v3 2/5] block/sheepdog: Use QEMU_NONSTRING for non NUL-terminated arrays |
Date: |
Wed, 19 Dec 2018 10:22:02 +0100 |
Le mer. 19 déc. 2018 00:09, Michael S. Tsirkin <address@hidden> a écrit :
> On Tue, Dec 18, 2018 at 06:51:19PM +0100, 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 <address@hidden>
> > Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
> > ---
> > block/sheepdog.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > 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];
>
> In case you decide to respin anyway - this would be
> a bit nicer as:
> char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN] QEMU_NONSTRING
>
I'll have to, so OK.
(it looked to me more explicit prepended).
>
>
>
> > fd = connect_to_sdog(s, errp);
> > if (fd < 0) {
> > --
> > 2.17.2
>
[Qemu-devel] [PATCH v3 4/5] migration: Use QEMU_NONSTRING for non NUL-terminated arrays, Philippe Mathieu-Daudé, 2018/12/18