diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2018-02-16 15:55:45 +0000 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2018-02-16 15:55:45 +0000 |
| commit | 5e8d6a12d643a38b82a0a713a77d1192117dbdca (patch) | |
| tree | 86e5b8826acbcdfdaa91d5b51ddbfc9692236a1c /ui/vnc-auth-sasl.c | |
| parent | d9c92ae335d99dd32c52fc7b075ef4820b4c6571 (diff) | |
| parent | d50f09ff23f5509c05e3883440849b27af051f08 (diff) | |
| download | focaccia-qemu-5e8d6a12d643a38b82a0a713a77d1192117dbdca.tar.gz focaccia-qemu-5e8d6a12d643a38b82a0a713a77d1192117dbdca.zip | |
Merge remote-tracking branch 'remotes/kraxel/tags/ui-20180216-pull-request' into staging
bugfixes for vnc and sdl2 # gpg: Signature made Fri 16 Feb 2018 11:53:37 GMT # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/ui-20180216-pull-request: ui: extend VNC trottling tracing to SASL codepaths ui: check VNC audio frequency limit at time of reading from client ui: avoid 'local_err' variable shadowing in VNC SASL auth ui: avoid risk of 32-bit int overflow in VNC buffer check sdl2: fix mouse grab sdl: restore optimized redraw vnc: fix segfault in closed connection handling vnc: add qapi/error.h include to stubs vnc: remove bogus object_unref on client socket Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'ui/vnc-auth-sasl.c')
| -rw-r--r-- | ui/vnc-auth-sasl.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/ui/vnc-auth-sasl.c b/ui/vnc-auth-sasl.c index fbccca8c8a..3751a777a4 100644 --- a/ui/vnc-auth-sasl.c +++ b/ui/vnc-auth-sasl.c @@ -79,12 +79,23 @@ size_t vnc_client_write_sasl(VncState *vs) vs->sasl.encodedOffset += ret; if (vs->sasl.encodedOffset == vs->sasl.encodedLength) { + bool throttled = vs->force_update_offset != 0; + size_t offset; if (vs->sasl.encodedRawLength >= vs->force_update_offset) { vs->force_update_offset = 0; } else { vs->force_update_offset -= vs->sasl.encodedRawLength; } + if (throttled && vs->force_update_offset == 0) { + trace_vnc_client_unthrottle_forced(vs, vs->ioc); + } + offset = vs->output.offset; buffer_advance(&vs->output, vs->sasl.encodedRawLength); + if (offset >= vs->throttle_output_offset && + vs->output.offset < vs->throttle_output_offset) { + trace_vnc_client_unthrottle_incremental(vs, vs->ioc, + vs->output.offset); + } vs->sasl.encoded = NULL; vs->sasl.encodedOffset = vs->sasl.encodedLength = 0; } @@ -556,7 +567,6 @@ void start_auth_sasl(VncState *vs) /* Inform SASL that we've got an external SSF layer from TLS/x509 */ if (vs->auth == VNC_AUTH_VENCRYPT && vs->subauth == VNC_AUTH_VENCRYPT_X509SASL) { - Error *local_err = NULL; int keysize; sasl_ssf_t ssf; @@ -565,7 +575,6 @@ void start_auth_sasl(VncState *vs) if (keysize < 0) { trace_vnc_auth_fail(vs, vs->auth, "cannot TLS get cipher size", error_get_pretty(local_err)); - error_free(local_err); sasl_dispose(&vs->sasl.conn); vs->sasl.conn = NULL; goto authabort; |