All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Gerd Hoffmann <kraxel@redhat.com>,
	QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PULL 10/14] ui: fix VNC client throttling when audio capture is active
Date: Thu, 18 Jan 2018 14:12:56 +0000	[thread overview]
Message-ID: <20180118141256.GS19695@redhat.com> (raw)
In-Reply-To: <b56b41f6-f048-00bf-d5fb-a1ed20ddeb09@redhat.com>

On Thu, Jan 18, 2018 at 02:54:48PM +0100, Paolo Bonzini wrote:
> On 18/01/2018 14:36, Daniel P. Berrange wrote:
> >>> +/*
> >>> + * Figure out how much pending data we should allow in the output
> >>> + * buffer before we throttle incremental display updates, and/or
> >>> + * drop audio samples.
> >>> + *
> >>> + * We allow for equiv of 1 full display's worth of FB updates,
> >>> + * and 1 second of audio samples. If audio backlog was larger
> >>> + * than that the client would already suffering awful audio
> >>> + * glitches, so dropping samples is no worse really).
> >>> + */
> >>> +static void vnc_update_throttle_offset(VncState *vs)
> >>> +{
> >>> +    size_t offset =
> >>> +        vs->client_width * vs->client_height * vs->client_pf.bytes_per_pixel;
> >> because the multiply is done with the "int" type, and then may
> >> be sign-extended when converted to the probably-64-bit unsigned
> >> size_t, resulting in the high bits all being set if the
> >> multiply ended up with a 1 in bit 31.
> > I guess we can usefully change client_width/client_height to be an unsigned
> > int, since there's no valid scenario for them to be negative.
> 
> In addition to that, do we support a >= 2 GiB framebuffer at all? (Even
> with unsigned ints, Coverity would rightly complain about a truncated
> 32-bit multiplication being assigned to a 64-bit value).

client_width/client_height are values that are initialized from the
graphics card frontend config, and thus limited by amount of video
RAM QEMU allows.   bytes_per_pixel is limited to 8/16/32.

So I think we're safe from 2GB overflow in any normal case.

That said, VGA RAM size is configurable, so I'm curious what would happen
if someone configured an insanely large VGA RAM and asked for a big frame
buffer in guest.

VNC is protocol limited to uint16 for width/height size, and so is X11
so I imagine some exploding behavour would follow :-)

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 :|

  reply	other threads:[~2018-01-18 14:13 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-12 12:58 [Qemu-devel] [PULL 00/14] Vnc 20180112 patches Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 01/14] vnc: fix debug spelling Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 02/14] ui: remove 'sync' parameter from vnc_update_client Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 03/14] ui: remove unreachable code in vnc_update_client Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 04/14] ui: remove redundant indentation in vnc_client_update Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 05/14] ui: avoid pointless VNC updates if framebuffer isn't dirty Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 06/14] ui: track how much decoded data we consumed when doing SASL encoding Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 07/14] ui: introduce enum to track VNC client framebuffer update request state Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 08/14] ui: correctly reset framebuffer update state after processing dirty regions Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 09/14] ui: refactor code for determining if an update should be sent to the client Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 10/14] ui: fix VNC client throttling when audio capture is active Gerd Hoffmann
2018-01-18 13:29   ` Peter Maydell
2018-01-18 13:36     ` Daniel P. Berrange
2018-01-18 13:54       ` Paolo Bonzini
2018-01-18 14:12         ` Daniel P. Berrange [this message]
2018-01-18 14:46           ` Paolo Bonzini
2018-01-18 14:50             ` Peter Maydell
2018-01-18 15:33               ` Paolo Bonzini
2018-01-18 16:06                 ` Thomas Huth
2018-01-18 16:13                   ` Paolo Bonzini
2018-01-25  9:08                     ` Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 11/14] ui: fix VNC client throttling when forced update is requested Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 12/14] ui: place a hard cap on VNC server output buffer size Gerd Hoffmann
2018-01-12 16:40   ` Peter Maydell
2018-01-12 16:50     ` Daniel P. Berrange
2018-01-12 12:58 ` [Qemu-devel] [PULL 13/14] ui: add trace events related to VNC client throttling Gerd Hoffmann
2018-01-12 12:58 ` [Qemu-devel] [PULL 14/14] ui: mix misleading comments & return types of VNC I/O helper methods Gerd Hoffmann
2018-01-12 16:41 ` [Qemu-devel] [PULL 00/14] Vnc 20180112 patches Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180118141256.GS19695@redhat.com \
    --to=berrange@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.