[Spice-devel] [usbredir v2] usbredirhost: Fix coverity sign_extension warning
Victor Toso
victortoso at redhat.com
Thu Aug 4 12:25:25 UTC 2016
Hi,
On Thu, Aug 04, 2016 at 08:18:19AM -0400, Frediano Ziglio wrote:
> >
> > Complain from coverity:
> > usbredir-0.7.1/usbredirhost/usbredirhost.c:1159: sign_extension:
> > Suspicious implicit sign extension: "max_packetsize" with type
> > "unsigned short" (16 bits, unsigned) is promoted in
> > "pkts_per_transfer * transfer_count * max_packetsize" to type "int"
> > (32 bits, signed), then sign-extended to type "unsigned long"
> > (64 bits, unsigned). If "pkts_per_transfer * transfer_count *
> > max_packetsize" is greater than 0x7FFFFFFF, the upper bits of the
> > result will all be 1.
> >
> > Pretty sure that reaching 0x7FFFFFFF is improbable but let's make
> > coverity happy.
> > ---
> > usbredirhost/usbredirhost.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/usbredirhost/usbredirhost.c b/usbredirhost/usbredirhost.c
> > index 3e80677..909ebdd 100644
> > --- a/usbredirhost/usbredirhost.c
> > +++ b/usbredirhost/usbredirhost.c
> > @@ -1156,7 +1156,8 @@ static void usbredirhost_stop_stream(struct
> > usbredirhost *host,
> > static void usbredirhost_set_iso_threshold(struct usbredirhost *host,
> > uint8_t pkts_per_transfer, uint8_t transfer_count, uint16_t
> > max_packetsize)
> > {
> > - uint64_t reference = pkts_per_transfer * transfer_count *
> > max_packetsize;
> > + uint64_t reference = ((size_t) (pkts_per_transfer)) * transfer_count *
> > max_packetsize;
> > +
> > host->iso_threshold.lower = reference / 2;
> > host->iso_threshold.higher = reference * 3;
> > DEBUG("higher threshold is %" PRIu64 " bytes | lower threshold is %"
> > PRIu64 " bytes",
>
> I didn't manage to find the repository for this code.
https://cgit.freedesktop.org/spice/usbredir/tree/usbredirhost/usbredirhost.c#n1156
> Why reference is 64 bit?
> pkts_per_transfer * transfer_count * max_packetsize surely fit in a 32 bit.
Yes.
> Using 32 bit would possibly optimize code a bit if somebody is using 32 bit
> (more unlikely for 64 bit) and would make the print formatting easier.
>
> Frediano
This should be called once per device I think, so optimization is not
really a must but I don't really mind to change it.
Cheers,
toso
More information about the Spice-devel
mailing list