[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 7/7] hw/usb: avoid format truncation warning when
From: |
Daniel P . Berrangé |
Subject: |
Re: [Qemu-devel] [PULL 7/7] hw/usb: avoid format truncation warning when formatting port name |
Date: |
Mon, 18 Jan 2021 11:35:38 +0000 |
User-agent: |
Mutt/1.14.6 (2020-07-11) |
On Mon, Jan 18, 2021 at 12:31:07PM +0100, Philippe Mathieu-Daudé wrote:
> Hello,
>
> On 5/3/19 8:59 AM, Gerd Hoffmann wrote:
> > From: Daniel P. Berrangé <berrange@redhat.com>
> >
> > hw/usb/hcd-xhci.c: In function ‘usb_xhci_realize’:
> > hw/usb/hcd-xhci.c:3339:66: warning: ‘%d’ directive output may be truncated
> > writing between 1 and 10 bytes into a region of size 5 [-Wformat-trunca\
> > tion=]
> > 3339 | snprintf(port->name, sizeof(port->name), "usb2 port
> > #%d", i+1);
> > | ^~
> > hw/usb/hcd-xhci.c:3339:54: note: directive argument in the range [1,
> > 2147483647]
> > 3339 | snprintf(port->name, sizeof(port->name), "usb2 port
> > #%d", i+1);
> > | ^~~~~~~~~~~~~~~
> >
> > The xhci code formats the port name into a fixed length
> > buffer which is only large enough to hold port numbers
> > upto 5 digits in decimal representation. We're never
> > going to have a port number that large, so aserting the
> > port number is sensible is sufficient to tell GCC the
> > formatted string won't be truncated.
> >
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > Message-Id: <20190412121626.19829-5-berrange@redhat.com>
> >
> > [ kraxel: also s/int/unsigned int/ to tell gcc they can't
> > go negative. ]
> >
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> > ---
> > hw/usb/hcd-xhci.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
> > index d8472b4fea7f..2e9a839f2bf9 100644
> > --- a/hw/usb/hcd-xhci.c
> > +++ b/hw/usb/hcd-xhci.c
> > @@ -3306,7 +3306,7 @@ static void usb_xhci_init(XHCIState *xhci)
> > {
> > DeviceState *dev = DEVICE(xhci);
> > XHCIPort *port;
> > - int i, usbports, speedmask;
> > + unsigned int i, usbports, speedmask;
> >
> > xhci->usbsts = USBSTS_HCH;
> >
> > @@ -3336,6 +3336,7 @@ static void usb_xhci_init(XHCIState *xhci)
> > USB_SPEED_MASK_LOW |
> > USB_SPEED_MASK_FULL |
> > USB_SPEED_MASK_HIGH;
> > + assert(i < MAXPORTS);
> > snprintf(port->name, sizeof(port->name), "usb2 port #%d", i+1);
> > speedmask |= port->speedmask;
> > }
> > @@ -3349,6 +3350,7 @@ static void usb_xhci_init(XHCIState *xhci)
> > }
> > port->uport = &xhci->uports[i];
> > port->speedmask = USB_SPEED_MASK_SUPER;
> > + assert(i < MAXPORTS);
> > snprintf(port->name, sizeof(port->name), "usb3 port #%d", i+1);
> > speedmask |= port->speedmask;
> > }
> >
>
> I am confused, I upgraded Fedora 32 -> 33 and am now getting this
> error back, the assertion being apparently ignored:
I'm not seeing this on F33 myself, but our CI is still F32. We
should upgrade that.
What are your configure args ?
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|