From patchwork Wed Jan 10 15:39:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edgar Kaziakhmedov X-Patchwork-Id: 858365 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="AsGnbUqG"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zGtWH3jyGz9s7c for ; Thu, 11 Jan 2018 02:40:27 +1100 (AEDT) Received: from localhost ([::1]:49195 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZIUL-0000mA-JK for incoming@patchwork.ozlabs.org; Wed, 10 Jan 2018 10:40:25 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58545) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZITa-0000T4-Lk for qemu-devel@nongnu.org; Wed, 10 Jan 2018 10:39:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eZITX-0006ud-Hu for qemu-devel@nongnu.org; Wed, 10 Jan 2018 10:39:38 -0500 Received: from mail-ve1eur01on0701.outbound.protection.outlook.com ([2a01:111:f400:fe1f::701]:37790 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eZITX-0006ts-6m for qemu-devel@nongnu.org; Wed, 10 Jan 2018 10:39:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=BdOB9Vk4ldqDSxZTRZ74UJrwPoPk+fD2z9mHPCbZf84=; b=AsGnbUqGwXthVDCXsfzp6TUfTatQrZciXx04/Qykl1PnHhx5Ani1O7ImX1OUhuVht1NUn7Q/cI+X/6RwxHxaO8msatYw9Wa5MJgcWu5kiGQB/tXD5/vIqFRsrKiGibqSvIQbR8cDMe8X4WVm/Pv507SVy00ulljBCP/1fLrJ6HA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=edgard.kaziakhmedov@virtuozzo.com; Received: from virtstar.sw.ru (195.214.232.6) by HE1PR0801MB1948.eurprd08.prod.outlook.com (2603:10a6:3:4f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Wed, 10 Jan 2018 15:39:32 +0000 From: Edgar Kaziakhmedov To: qemu-devel@nongnu.org Date: Wed, 10 Jan 2018 18:39:24 +0300 Message-Id: <20180110153924.17391-1-edgar.kaziakhmedov@virtuozzo.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0402CA0023.eurprd04.prod.outlook.com (2603:10a6:3:d0::33) To HE1PR0801MB1948.eurprd08.prod.outlook.com (2603:10a6:3:4f::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 30b30cbf-af12-41a5-d120-08d55840581d X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:HE1PR0801MB1948; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1948; 3:5AcMbpS7N1GIGzbe6jK2mxh9OsZX4KjB8kq/iVl3iUQvqqhSIq7kdm2A+5tmdCUQaUOYZx5abFLmhUaH0QozC/Z/oEq3CNsre/YpcXWZVDizSIdNaNOqG+ocF7Nf9MucXTE11maUJhIgvURq5tGZB59yxjq4k8L4VzpFT6S7aRsDGzeFxr00wwtJoLlyfdO6McDyt0QLdWqbkStaWCznPoBqNX5QOT7n3rtmTpA7SX4gpoMHlWowkn6SbWmOUtyg; 25:LVtnV7JfMYpX+aqdpnd8V0QQwuCVSGwN2DOaCX7BRQ5BbMa3G9TSEW4N0UnPd3wLvy6JPzSW/7v0B4DTB6H5BcvxsCl9SAXYm3pzuknxnVU8HWCJpiWzZSGwwKuQFyL491iE5Lzh1y7saLshNBEE6QKgR9NlHPArkl4xoOnCyzq6Kt2VVaKcBDKdVwOzBkrw+CAiU4/1YJ4ih40P6SX6+ZBTeYSCcyhJo1zl699yPZ778PU2kFtLrtY9PRL70RU0G7JNOfcozQMIjtqnaSGkBx+vjj3ewqy6XjxnsFRrNcp4mGFV0Et1dy6Uhl3iuy1dhmssytg5LoJfq2gMZq3daA==; 31:9bg5nv0aR9OH+gODzdMj6BjbZMqViI6/+kArzujc94ANeWV4z14vu7VdXl/yAyFjSX43fhFJtp4DS8TNz5b+CK3TxVpjzGUJyeqx+gOwLNw4DxWrZcLDI2NkPICPA3qLzVUGLzqJq9majtTjrp9ZnmJt8ftxAWhg0hUZP/VhKarrn6kulS/NSg2LlqEghluC+gISouzVa9E28LKlIlnIercxd6x9zYDC0WMFl6ZfI78= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1948: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1948; 20:YwqNX5B5mw7Bn6zmydOKCZPYXj56z4SwzELHgJnulbeTddF0LbSXpmUNpwE1wLOT0T5+APUQXJxJJxMSVNIyd06LnlyBs0H+AqzvXwMj21FvYUqwx+V2KDrf6+QyP8NTWjW5FeO7EHivCFI+5uJFoP57pDhTJ6hhjkBHO4FhzN3oXJUWXvfz+EvJvPrDOmmzfTyAPTxwOnqv7rD75CmoUtBfVSBLet7qBKWONIaUQmdOMG9WZ3jCfQzaOH4vQF8AlX7oTcMR3Ywk/GTZ8PL2l5NGd8GQbgezqVfDqOEpX4rL9quLzCzMNVCmaEd7QhXnaE3etPuuE+27huNQIaF7wi+CUrvdMmC3YX2VCq9WnvGmYGbwFXr72ereHRXtSFdTj2VLPwGGc1k3RWNaX0TuDXVHMOz1RudSldys/KWvU7c=; 4:btvASVwSwut6we+YSFTphsMOFMLl/Q2Y7gqL6nb/qPpSEuBRU+w11zLBMWu85MdWxxQPJFs4634PBzT3ShTfJnKhZPT/Vt28AbbeqY8U/WE9DjdsbHtGncBtclhUKV/4DYz8n5M3Ys5lAOyeI33aYiUfyF5SetncVtXVzG41SAV6PbskH2YMELpCVmUFXAXeOnSnJTGYTA+/0y9N58VA8eOwLUlCdkNDGOt9GWb7+MUAaFmqOnN0ykFOSt1RX3K1rntsWJepSJVLlgQHKDJS7g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(3231023)(944501075)(10201501046)(93006095)(93001095)(3002001)(6041268)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:HE1PR0801MB1948; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:HE1PR0801MB1948; X-Forefront-PRVS: 0548586081 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(39850400004)(396003)(366004)(376002)(346002)(39380400002)(199004)(189003)(2361001)(3846002)(1076002)(25786009)(6116002)(69596002)(305945005)(7736002)(68736007)(316002)(478600001)(16586007)(2906002)(106356001)(36756003)(48376002)(50466002)(8676002)(53416004)(6916009)(97736004)(16526018)(81156014)(105586002)(53936002)(6486002)(51416003)(6512007)(8936002)(52116002)(81166006)(2351001)(6506007)(5660300001)(47776003)(55236004)(50226002)(386003)(6666003)(4326008)(66066001); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0801MB1948; H:virtstar.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0801MB1948; 23:HtCKz3M1kcyPaCau0Cj4f5bWGz3aFrRTMUz8xpl?= rQBvKn9/gPpRHGElus8Stqtf3dILmSRs6jxhKm3msM8GYU0FsB6K+QwPWrpp3LUetaoGI1sjv+5mVUYL8RK2PT22r9ZkpTbRSj4a8OI+fg3qS1E5iOnhr79b9Y5VbugIHX+yOWk52tKBG71NhlMexOCls3smrWbTHKloaRxQqXuRU0b8FhEiR9fXFVqvJwlzfUzmjzrD+eQAiTgC7gYUfJ+/npeKNv71Qmb3Zg3s30IYte79eegRt/wgIOu+5SsOK5rYffd2s0ObCqvQdxAkyqqh/DYl438h6TAFaZ19mAdZBwYQiC6v+fsFj+YIPftlHOheQp65uLpPOHbi6BHugpvRXqEIWWn4NYpXInKhOJjv82EPDxILpQA3l+6GJTovLbaw8pt2/H4EDk3WXED/bcO7a9KU2FMP2jp6h2kvYccLscdRII+PeYd3N9L9kSKXrrgM8D2ZqrpUPES/GX1vW3Bzvv1iJlzWcjs/LGeGcFrmXc0Nd7699pEOuygfBCIctxjSesjGV4zakGpgOgDpdaotJmbnEzhLC7Zx3G9XMbRROXaB9x3KQqq68pCYOLvOAT9EiFOgLxwgtpTor5TGFL22R/WwuvKCcHg3WYZI969U88Udc3+NPd4qA5ChhfV6swm/JILV19FWJwZhNli4T9TsH8iP2CkfSpuXZiTEcK/t+OBMWh8fSrVfjHC7au0uwfy1jY2MfaZTSzw1FTXItnNC6FzDI2s/zhMgqVHXLCYKCl39ugimas/h/k1oBxeBIEJk/2Jbevt3x3nyk0b0+Z+oV7HPj23EbpSIXa4bCH5in6a11C2wL7jnD3t2qeStx+peTH70VxYrn12xmLJVvf2z0o9p627JtAYc6jY/3+APIDzMn67m1z/bS4KQ7qSSJHTr/wM5bgSrVoO72BGxxykTcu5YNn3ZDVLTqb/YjlF5bDFYo92STWu9Pu6HmuHBAMo29sFbqkWKROvusehPOHjzQpw4maqE/ylOMsuMloUGkk1OuTe9al1/w2p1duCTMsDw02fuO7WQojqfr57mc/i7eIQiuWMxCFiQ2CwyrUGjeGyr22H0fDu2myByA0X38+AU= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1948; 6:zIDctTr0e8Ik6sGOvTFF3qRQqwnQ3sgV5QqluQxw1J+XhftkOefszOl7z7Y0cPa/m8N32WMpu7eSN0Y2WCPK7Zm6bv8FPZy9c7Nloavd+wEF+IC2RPyLul8bwfSKwmfP1NL1jzPYAn7rwLbeK6SpoyWHRmK/pxft6Gmf5XXIbaCByakILOLDSKNJDh0yyOHeEDN9q4FYpMGBJVFEiykqAw1yr1kwng8wbOXSdd530aUItF8yiRGvSHwJaFkmvl0cFpPoQDFaOiG7L+AGanOP2eeY870zsnUc8oy8pf9bDByiM3e7X4Pt8vW1hONih9WQHz9qpV3TaB3Gbhkf/8SjYZt4jhx5EoqyZow7/8Ln15Q=; 5:rOYPbFFHvxeoDRQetxEzqgqrBekwEYb0gRZ5Io2fruPglIizwiB5siOmGTFfZfGDnKdNQxfeYFsdr0ODq3qL0rxt2HnpL/nJGG5vg6UgPqKI8r04T0XaV4YiZEMStSep5gPZazLI9zGkc5pfVelApNIBv6bI+D0XSSy0s6619xs=; 24:JFhCAB3ik+Hrrw/NKxkuVl25OsyNp+nFjJoHbwSnIHMWMnQxpIRu3+GNB8N0nJxX0X+AVUlX8oFcPqGLC/vumViGIkdEnaiIZJTJLuWmisQ=; 7:IlTLKT+55T70JPQvUxirPQ5LKjnONjqpl9Y2tjOXUn5YMh0Q+YznETw/HVj5UgbyfU3hkhpnM7/SMqwL9VqrjTAVl9WPvPXUlHppjIPAA344XBNKf6l3FOxsUTNDY5eODgGaT7UFYde7xBb9ku80FHclXULDXwh4qFTr7eBq7sAmRgLu1OnlUshEvxUD1NHgdQJ06+zGZ4QEUCwrFKOYnhHggZUndbzW7cziA+IfR+8diMsp++jyR20Q5RV53mHI SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0801MB1948; 20:mBZOIM/S0rQH2quYP1DyRqqBWE3vbFqPkOfNRhAic6VQ/+tXAltkkbRLxlkGTpI5SD4OgGVYvBB9TAdhuj5JqsJ6KeEMfYtp9RppYHBLUqCSbv8PKGh8HHQlH76C3u/869jPuyrfY9tCokTHHiJyqkw42A+yaUUysO7cqQmL+Gs= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2018 15:39:32.0887 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 30b30cbf-af12-41a5-d120-08d55840581d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1948 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:fe1f::701 Subject: [Qemu-devel] [PATCH v3 1/1] io/channel-websock: handle continuous reads without any 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: den@openvz.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" According to the current implementation of websocket protocol in QEMU, qio_channel_websock_handshake_io tries to read handshake from the channel to start communication over socket. But this approach doesn't cover scenario when socket was closed while handshaking. Therefore, if G_IO_IN is caught and qio_channel_read returns zero, error has to be set and connection has to be done. Such behaviour causes 100% CPU load in main QEMU loop, because main loop poll continues to receive and handle G_IO_IN events from websocket. Step to reproduce 100% CPU load: 1) start qemu with the simplest configuration $ qemu -vnc [::1]:1,websocket=7500 2) open any vnc listener (which doesn't follow websocket protocol) $ vncviewer :7500 3) kill listener 4) qemu main thread eats 100% CPU Signed-off-by: Edgar Kaziakhmedov --- io/channel-websock.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) -- 2.11.0 diff --git a/io/channel-websock.c b/io/channel-websock.c index 87ebdebfc0..1152715535 100644 --- a/io/channel-websock.c +++ b/io/channel-websock.c @@ -502,9 +502,12 @@ static int qio_channel_websock_handshake_read(QIOChannelWebsock *ioc, error_setg(errp, "End of headers not found in first 4096 bytes"); return 1; - } else { - return 0; + } else if (ret == 0) { + error_setg(errp, + "End of headers not found before connection closed"); + return -1; } + return 0; } *handshake_end = '\0';