From nobody Fri May 3 18:59:42 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 151758906661212.448993324061462; Fri, 2 Feb 2018 08:31:06 -0800 (PST) Received: from localhost ([::1]:38954 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eheEz-0001kE-Nq for importer@patchew.org; Fri, 02 Feb 2018 11:31:05 -0500 Received: from eggs.gnu.org ([208.118.235.92]:52516) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ehdNg-00012T-6B for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:37:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ehdMG-0005ew-Oz for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:35:38 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39772) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ehdMG-0005cf-3V for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:34:32 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7327E81DF5 for ; Fri, 2 Feb 2018 07:17:54 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-227.ams2.redhat.com [10.36.116.227]) by smtp.corp.redhat.com (Postfix) with ESMTP id D790F6BF98; Fri, 2 Feb 2018 07:17:51 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 148D431FFF; Fri, 2 Feb 2018 08:17:51 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 2 Feb 2018 08:17:49 +0100 Message-Id: <20180202071751.16316-2-kraxel@redhat.com> In-Reply-To: <20180202071751.16316-1-kraxel@redhat.com> References: <20180202071751.16316-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 02 Feb 2018 07:17:54 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 1/3] ui: fix mixup between qnum and qcode in SDL1 key handling X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: Daniel P. Berrang=C3=A9 The previous commit: commit 2ec78706d188df7d3dab43d07b19b05ef7800a44 Author: Daniel P. Berrange Date: Wed Jan 17 16:47:15 2018 +0000 ui: convert GTK and SDL1 frontends to keycodemapdb changed the x_keymap.c keymap so that its target was qcodes instead of qnums. It updated the GTK frontend to take account of this change, but forgot to update the SDL1 frontend. Thus the SDL frontend was getting qcodes but dispatching them as if they were qnums. IOW, keyboard input was completely hosed with SDL1. Since the keyboard layout tables are still all based on qnums, it is easier to just keep SDL1 using qnums as it will be deleted in a few releases time. Reported-by: BALATON Zoltan Signed-off-by: Daniel P. Berrang=C3=A9 Tested-by: BALATON Zoltan Message-id: 20180201180033.14255-1-berrange@redhat.com Signed-off-by: Gerd Hoffmann --- ui/sdl.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ui/sdl.c b/ui/sdl.c index c8f102bb9f..a6bff301eb 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -242,6 +242,7 @@ static const guint16 *sdl_get_keymap(size_t *maplen) =20 static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev) { + int qcode; if (!keycode_map) { return 0; } @@ -249,7 +250,13 @@ static uint8_t sdl_keyevent_to_keycode(const SDL_Keybo= ardEvent *ev) return 0; } =20 - return keycode_map[ev->keysym.scancode]; + qcode =3D keycode_map[ev->keysym.scancode]; + + if (qcode > qemu_input_map_qcode_to_qnum_len) { + return 0; + } + + return qemu_input_map_qcode_to_qnum[qcode]; } =20 static void reset_keys(void) --=20 2.9.3 From nobody Fri May 3 18:59:42 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1517590612797830.1489448627414; Fri, 2 Feb 2018 08:56:52 -0800 (PST) Received: from localhost ([::1]:39922 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ehedv-0007IR-32 for importer@patchew.org; Fri, 02 Feb 2018 11:56:51 -0500 Received: from eggs.gnu.org ([208.118.235.92]:35770) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ehdQ6-0006RO-8l for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:39:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ehdP2-0001Dn-7R for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:38:30 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37060) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ehdP1-0001AY-Ex for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:37:23 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C9C635F for ; Fri, 2 Feb 2018 07:17:54 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-227.ams2.redhat.com [10.36.116.227]) by smtp.corp.redhat.com (Postfix) with ESMTP id D78BF6BF97; Fri, 2 Feb 2018 07:17:51 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 1EAF240BF4; Fri, 2 Feb 2018 08:17:51 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 2 Feb 2018 08:17:50 +0100 Message-Id: <20180202071751.16316-3-kraxel@redhat.com> In-Reply-To: <20180202071751.16316-1-kraxel@redhat.com> References: <20180202071751.16316-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Fri, 02 Feb 2018 07:17:54 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 2/3] ui: convert VNC server to QIONetListener X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Daniel P. Berrange" The VNC server already has the ability to listen on multiple sockets. Converting it to use the QIONetListener APIs though, will reduce the amount of code in the VNC server and improve the clarity of what is left. Signed-off-by: Daniel P. Berrange Message-id: 20180201164514.10330-1-berrange@redhat.com Signed-off-by: Gerd Hoffmann --- ui/vnc.h | 9 +-- ui/vnc.c | 195 ++++++++++++++++++-----------------------------------------= ---- 2 files changed, 58 insertions(+), 146 deletions(-) diff --git a/ui/vnc.h b/ui/vnc.h index bbda0540a7..23b4dbbe72 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -37,6 +37,7 @@ #include "qemu/buffer.h" #include "io/channel-socket.h" #include "io/channel-tls.h" +#include "io/net-listener.h" #include =20 #include "keymaps.h" @@ -146,12 +147,8 @@ struct VncDisplay int num_exclusive; int connections_limit; VncSharePolicy share_policy; - size_t nlsock; - QIOChannelSocket **lsock; - guint *lsock_tag; - size_t nlwebsock; - QIOChannelSocket **lwebsock; - guint *lwebsock_tag; + QIONetListener *listener; + QIONetListener *wslistener; DisplaySurface *ds; DisplayChangeListener dcl; kbd_layout_t *kbd_layout; diff --git a/ui/vnc.c b/ui/vnc.c index 33b087221f..93731accb6 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -228,12 +228,12 @@ static VncServerInfo *vnc_server_info_get(VncDisplay = *vd) VncServerInfo *info; Error *err =3D NULL; =20 - if (!vd->nlsock) { + if (!vd->listener || !vd->listener->nsioc) { return NULL; } =20 info =3D g_malloc0(sizeof(*info)); - vnc_init_basic_info_from_server_addr(vd->lsock[0], + vnc_init_basic_info_from_server_addr(vd->listener->sioc[0], qapi_VncServerInfo_base(info), &e= rr); info->has_auth =3D true; info->auth =3D g_strdup(vnc_auth_name(vd)); @@ -379,7 +379,7 @@ VncInfo *qmp_query_vnc(Error **errp) VncDisplay *vd =3D vnc_display_find(NULL); SocketAddress *addr =3D NULL; =20 - if (vd =3D=3D NULL || !vd->nlsock) { + if (vd =3D=3D NULL || !vd->listener || !vd->listener->nsioc) { info->enabled =3D false; } else { info->enabled =3D true; @@ -388,11 +388,8 @@ VncInfo *qmp_query_vnc(Error **errp) info->has_clients =3D true; info->clients =3D qmp_query_client_list(vd); =20 - if (vd->lsock =3D=3D NULL) { - return info; - } - - addr =3D qio_channel_socket_get_local_address(vd->lsock[0], errp); + addr =3D qio_channel_socket_get_local_address(vd->listener->sioc[0= ], + errp); if (!addr) { goto out_error; } @@ -572,13 +569,14 @@ VncInfo2List *qmp_query_vnc_servers(Error **errp) info->has_display =3D true; info->display =3D g_strdup(dev->id); } - for (i =3D 0; i < vd->nlsock; i++) { + for (i =3D 0; vd->listener !=3D NULL && i < vd->listener->nsioc; i= ++) { info->server =3D qmp_query_server_entry( - vd->lsock[i], false, vd->auth, vd->subauth, info->server); + vd->listener->sioc[i], false, vd->auth, vd->subauth, + info->server); } - for (i =3D 0; i < vd->nlwebsock; i++) { + for (i =3D 0; vd->wslistener !=3D NULL && i < vd->wslistener->nsio= c; i++) { info->server =3D qmp_query_server_entry( - vd->lwebsock[i], true, vd->ws_auth, + vd->wslistener->sioc[i], true, vd->ws_auth, vd->ws_subauth, info->server); } =20 @@ -3143,36 +3141,18 @@ void vnc_start_protocol(VncState *vs) qemu_add_mouse_mode_change_notifier(&vs->mouse_mode_notifier); } =20 -static gboolean vnc_listen_io(QIOChannel *ioc, - GIOCondition condition, - void *opaque) +static void vnc_listen_io(QIONetListener *listener, + QIOChannelSocket *cioc, + void *opaque) { VncDisplay *vd =3D opaque; - QIOChannelSocket *sioc =3D NULL; - Error *err =3D NULL; - bool isWebsock =3D false; - size_t i; + bool isWebsock =3D listener =3D=3D vd->wslistener; =20 - for (i =3D 0; i < vd->nlwebsock; i++) { - if (ioc =3D=3D QIO_CHANNEL(vd->lwebsock[i])) { - isWebsock =3D true; - break; - } - } - - sioc =3D qio_channel_socket_accept(QIO_CHANNEL_SOCKET(ioc), &err); - if (sioc !=3D NULL) { - qio_channel_set_name(QIO_CHANNEL(sioc), - isWebsock ? "vnc-ws-server" : "vnc-server"); - qio_channel_set_delay(QIO_CHANNEL(sioc), false); - vnc_connect(vd, sioc, false, isWebsock); - object_unref(OBJECT(sioc)); - } else { - /* client probably closed connection before we got there */ - error_free(err); - } - - return TRUE; + qio_channel_set_name(QIO_CHANNEL(cioc), + isWebsock ? "vnc-ws-server" : "vnc-server"); + qio_channel_set_delay(QIO_CHANNEL(cioc), false); + vnc_connect(vd, cioc, false, isWebsock); + object_unref(OBJECT(cioc)); } =20 static const DisplayChangeListenerOps dcl_ops =3D { @@ -3224,34 +3204,22 @@ void vnc_display_init(const char *id) =20 static void vnc_display_close(VncDisplay *vd) { - size_t i; if (!vd) { return; } vd->is_unix =3D false; - for (i =3D 0; i < vd->nlsock; i++) { - if (vd->lsock_tag[i]) { - g_source_remove(vd->lsock_tag[i]); - } - object_unref(OBJECT(vd->lsock[i])); + + if (vd->listener) { + qio_net_listener_disconnect(vd->listener); + object_unref(OBJECT(vd->listener)); } - g_free(vd->lsock); - g_free(vd->lsock_tag); - vd->lsock =3D NULL; - vd->lsock_tag =3D NULL; - vd->nlsock =3D 0; + vd->listener =3D NULL; =20 - for (i =3D 0; i < vd->nlwebsock; i++) { - if (vd->lwebsock_tag[i]) { - g_source_remove(vd->lwebsock_tag[i]); - } - object_unref(OBJECT(vd->lwebsock[i])); + if (vd->wslistener) { + qio_net_listener_disconnect(vd->wslistener); + object_unref(OBJECT(vd->wslistener)); } - g_free(vd->lwebsock); - g_free(vd->lwebsock_tag); - vd->lwebsock =3D NULL; - vd->lwebsock_tag =3D NULL; - vd->nlwebsock =3D 0; + vd->wslistener =3D NULL; =20 vd->auth =3D VNC_AUTH_INVALID; vd->subauth =3D VNC_AUTH_INVALID; @@ -3303,11 +3271,11 @@ static void vnc_display_print_local_addr(VncDisplay= *vd) SocketAddress *addr; Error *err =3D NULL; =20 - if (!vd->nlsock) { + if (!vd->listener || !vd->listener->nsioc) { return; } =20 - addr =3D qio_channel_socket_get_local_address(vd->lsock[0], &err); + addr =3D qio_channel_socket_get_local_address(vd->listener->sioc[0], &= err); if (!addr) { return; } @@ -3815,68 +3783,6 @@ static int vnc_display_connect(VncDisplay *vd, } =20 =20 -static int vnc_display_listen_addr(VncDisplay *vd, - SocketAddress *addr, - const char *name, - QIOChannelSocket ***lsock, - guint **lsock_tag, - size_t *nlsock, - Error **errp) -{ - QIODNSResolver *resolver =3D qio_dns_resolver_get_instance(); - SocketAddress **rawaddrs =3D NULL; - size_t nrawaddrs =3D 0; - Error *listenerr =3D NULL; - bool listening =3D false; - size_t i; - - if (qio_dns_resolver_lookup_sync(resolver, addr, &nrawaddrs, - &rawaddrs, errp) < 0) { - return -1; - } - - for (i =3D 0; i < nrawaddrs; i++) { - QIOChannelSocket *sioc =3D qio_channel_socket_new(); - - qio_channel_set_name(QIO_CHANNEL(sioc), name); - if (qio_channel_socket_listen_sync( - sioc, rawaddrs[i], listenerr =3D=3D NULL ? &listenerr : NU= LL) < 0) { - object_unref(OBJECT(sioc)); - continue; - } - listening =3D true; - (*nlsock)++; - *lsock =3D g_renew(QIOChannelSocket *, *lsock, *nlsock); - *lsock_tag =3D g_renew(guint, *lsock_tag, *nlsock); - - (*lsock)[*nlsock - 1] =3D sioc; - (*lsock_tag)[*nlsock - 1] =3D 0; - } - - for (i =3D 0; i < nrawaddrs; i++) { - qapi_free_SocketAddress(rawaddrs[i]); - } - g_free(rawaddrs); - - if (listenerr) { - if (!listening) { - error_propagate(errp, listenerr); - return -1; - } else { - error_free(listenerr); - } - } - - for (i =3D 0; i < *nlsock; i++) { - (*lsock_tag)[i] =3D qio_channel_add_watch( - QIO_CHANNEL((*lsock)[i]), - G_IO_IN, vnc_listen_io, vd, NULL); - } - - return 0; -} - - static int vnc_display_listen(VncDisplay *vd, SocketAddress **saddr, size_t nsaddr, @@ -3886,25 +3792,34 @@ static int vnc_display_listen(VncDisplay *vd, { size_t i; =20 - for (i =3D 0; i < nsaddr; i++) { - if (vnc_display_listen_addr(vd, saddr[i], - "vnc-listen", - &vd->lsock, - &vd->lsock_tag, - &vd->nlsock, - errp) < 0) { - return -1; + if (nsaddr) { + vd->listener =3D qio_net_listener_new(); + qio_net_listener_set_name(vd->listener, "vnc-listen"); + for (i =3D 0; i < nsaddr; i++) { + if (qio_net_listener_open_sync(vd->listener, + saddr[i], + errp) < 0) { + return -1; + } } + + qio_net_listener_set_client_func(vd->listener, + vnc_listen_io, vd, NULL); } - for (i =3D 0; i < nwsaddr; i++) { - if (vnc_display_listen_addr(vd, wsaddr[i], - "vnc-ws-listen", - &vd->lwebsock, - &vd->lwebsock_tag, - &vd->nlwebsock, - errp) < 0) { - return -1; + + if (nwsaddr) { + vd->wslistener =3D qio_net_listener_new(); + qio_net_listener_set_name(vd->wslistener, "vnc-ws-listen"); + for (i =3D 0; i < nwsaddr; i++) { + if (qio_net_listener_open_sync(vd->wslistener, + wsaddr[i], + errp) < 0) { + return -1; + } } + + qio_net_listener_set_client_func(vd->wslistener, + vnc_listen_io, vd, NULL); } =20 return 0; --=20 2.9.3 From nobody Fri May 3 18:59:42 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1517589931479421.02163920959435; Fri, 2 Feb 2018 08:45:31 -0800 (PST) Received: from localhost ([::1]:39463 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eheSt-0005ff-B1 for importer@patchew.org; Fri, 02 Feb 2018 11:45:27 -0500 Received: from eggs.gnu.org ([208.118.235.92]:60475) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ehdOC-0004ty-7z for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:37:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ehdN8-00070u-2R for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:36:31 -0500 Received: from mx1.redhat.com ([209.132.183.28]:4174) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ehdN7-0006yk-0C for qemu-devel@nongnu.org; Fri, 02 Feb 2018 10:35:25 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 33AC54F1B2 for ; Fri, 2 Feb 2018 07:17:54 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-227.ams2.redhat.com [10.36.116.227]) by smtp.corp.redhat.com (Postfix) with ESMTP id D92E778E80; Fri, 2 Feb 2018 07:17:51 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 26F9641A89; Fri, 2 Feb 2018 08:17:51 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 2 Feb 2018 08:17:51 +0100 Message-Id: <20180202071751.16316-4-kraxel@redhat.com> In-Reply-To: <20180202071751.16316-1-kraxel@redhat.com> References: <20180202071751.16316-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 02 Feb 2018 07:17:54 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 3/3] ui: correctly advance output buffer when writing SASL data X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: Daniel P. Berrang=C3=A9 In this previous commit: commit 8f61f1c5a6bc06438a1172efa80bc7606594fa07 Author: Daniel P. Berrange Date: Mon Dec 18 19:12:20 2017 +0000 ui: track how much decoded data we consumed when doing SASL encoding I attempted to fix a flaw with tracking how much data had actually been processed when encoding with SASL. With that flaw, the VNC server could mistakenly discard queued data that had not been sent. The fix was not quite right though, because it merely decremented the vs->output.offset value. This is effectively discarding data from the end of the pending output buffer. We actually need to discard data from the start of the pending output buffer. We also want to free memory that is no longer required. The correct way to handle this is to use the buffer_advance() helper method instead of directly manipulating the offset value. Reported-by: Laszlo Ersek Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Eric Blake Reviewed-by: Laszlo Ersek Message-id: 20180201155841.27509-1-berrange@redhat.com Signed-off-by: Gerd Hoffmann --- ui/vnc-auth-sasl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/vnc-auth-sasl.c b/ui/vnc-auth-sasl.c index 74a5f513f2..fbccca8c8a 100644 --- a/ui/vnc-auth-sasl.c +++ b/ui/vnc-auth-sasl.c @@ -84,7 +84,7 @@ size_t vnc_client_write_sasl(VncState *vs) } else { vs->force_update_offset -=3D vs->sasl.encodedRawLength; } - vs->output.offset -=3D vs->sasl.encodedRawLength; + buffer_advance(&vs->output, vs->sasl.encodedRawLength); vs->sasl.encoded =3D NULL; vs->sasl.encodedOffset =3D vs->sasl.encodedLength =3D 0; } --=20 2.9.3