From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11023107.outbound.protection.outlook.com [40.107.162.107]) by lore.virtuozzo.com (Postfix) with ESMTPS id E0E4580275 for ; Tue, 1 Sep 2026 15:51:11 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G33lKY0VBklFqlUf7Q1qIycDKsI43FUsLO0K0prwc1qPCUjT3AnMpDU59a0H48NhAogteK29JJny+7Tx+4eCLNUjJLpnp8f/eD2N3Fm8qubAFFiF1Z5iY+cldbyFm9+VVygIKaAEA2OEqiejhMOAagAf8UxBMZAkbXrNYwL6GSIiXsOVjBhzYz6Y2A8fqvas48oxB7SOy0DLyGUsNFo8J5UIG2wRizy2mw0AkY9bDsS8F1wWD1/QG5LDzwXgYXXoTEcUkBjHaMchsmSHglfRFdGjR2NFiE/BMEkdPiRXbV/h2i5pdUc2I/GcZdVgmV3M15xvILauPb/9xR0rkmupmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=8exMQb3Dud5k3Pl9DyIv0LceBjRk12MpZ9pcR3pOChk=; b=hGpdB+RKgDf7Sn2sRt6xS7Hak3FlqchzM7l+1F5MCEL85Sff6qYhELd6BD9t32SlOHdK9KFUz8EGzPThzhBSl7I8kDwVjiuB18XOkh49IdZieCmiehPNvPhJJBdWrMa50uGlGmvIK2L7/BZR1egziTaxwAHdUq55yvL/zr9ntF4q7etqypfhJKiprkhI84ft7OVwueg6wwEPk31ElBM8o4ZUVVaumOSscQngZ1HOi8CHbso2iVZdv4QCvbcpohkQ8+1AGGDnzvqWHJaiuWi7M4AMWzVGjkHMAnz01PvH/XfwA5bt3cM12zgrRFMmFcgXaBrwDvcjRCg2heh6EDwiZQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8exMQb3Dud5k3Pl9DyIv0LceBjRk12MpZ9pcR3pOChk=; b=LTxDPognuz9I7u/hX5VFxNeRsqc73GCVYACGV/6Plbor69U33KG56mW6iu2UnKQa9i3wwsIam7+twW6Pljock8UTvybHl0LphebMxkz+ASOY+jc0qf4QCO8XHlqH8Q+jzRDhgZHYQKZ+WuXPlAm9DyN8olcuWdp0aElWwLMNRq98aa4/u/t39ANzVVUf+/wzdnvsr/UmaweQNDQ+ubShkhxFVioZX74sUB7Da3rZKicqoHgsF+FSZVu8TbMD697UdeJjqVbxz/5wOWdlAUoLA6IhwBMvgsoeFG9RGeXpMIFmwQV84LAho/cUrPV0UrS5Qyjes81Hq0PmixFw/mA/Vw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AM8PR08MB6610.eurprd08.prod.outlook.com (2603:10a6:20b:36a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Tue, 1 Sep 2026 15:51:10 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0382.007; Tue, 1 Sep 2026 15:51:10 +0000 Message-ID: <18b04493-f414-4543-8686-c1e2baea0702@virtuozzo.com> Date: Tue, 1 Sep 2026 18:51:10 +0300 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH hci-8.0 0/6] io/channel-websock: fix an unauthenticated crash in the handshake #VSTOR-143316 To: "Denis V. Lunev" , svt-core@virtuozzo.com References: <20260831140620.1204363-1-den@openvz.org> Content-Language: en-US From: Andrey Drobyshev In-Reply-To: <20260831140620.1204363-1-den@openvz.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: ZR0P278CA0152.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:41::10) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AM8PR08MB6610:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ee304e0-2e23-4776-1c9e-08df0840d81a X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|23010399003|5113699003|22082099003|18002099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: iZE0jjcBs3W7xxYBNz5VnRrmCzGqT1ny0FI78bThGjcpYG4kiz5vtqnSUqZnnOV+dlYwV4nT2XCU9kGlBmtK5UkeJqKKFLxc3xhPzsk0Lj4qCBRe6xjbmH5I8hAZ+oKyBbPzb5hQ29r5iLrxNvXUsSc8bhSXcAeVEo44UneCqd1AA3kwwqIlLm9f/YbDLYQz7ChotMkxR8y/S/5+3xBsJumHaqRM8oMEwwB+4/L2lHJ35l8PwOj6JJ0GC5FKVBAOQWNh0k2zsi6N8cjYX9WOx8GTFI4aJNBmqav0aR/V8hCWZJIvP5tI39r1RwTA+5PY2283bYmddkVzUCz0XzMICb1R/WKzGEkh4RHAYi3aAq+wR2Dkvq4cELdqI0vgxQ1AHa+Oqk671kwKkEkmi1R2hIcjOMsQLhHJAPVI22Os8TFUWsvEDzmnhjvVDmwn2CFLfh7aVG+LjU4yXdkfA4DAaRDIindAntKZi5m9c3L4olWkIKTS9pAH/qQYMiy0+g7AfQoKJJ0AWMOrUL6ltWUqGwwIRs9YvWND+XhiVkLG/DLo+/cabfqIY6ZA1aJBuDLHFMXXX4D6vPwa94uzrG+i9Fw3GJF6kQrWxEyunpIKCKoMsp8R5Eysae9NwW4d/fvh5KeDBRKkZMH03j5I2zQZoll/OsjCAQOTQ1OaXrmP+50= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(23010399003)(5113699003)(22082099003)(18002099003)(56012099006)(10067099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WFF6czEvLzBQeHdSek0zSkMrUVVGUGxqRW5PYkxUU1ROVHNZOEh6ZktBUXFF?= =?utf-8?B?ckF0WStvcTEwaHhmcXNmRDc0NmRRaGVSYkNVUUl6cStnZjZ6OWViLzJHRUlQ?= =?utf-8?B?RFlLODB0RncxQUovOTB4OG81QTdZRzNYanplQnZ3NFBzQjZnUGpXdFMzNFV0?= =?utf-8?B?MlFBQzZDbWVYa3pOVXVQeEdvdDNLOVFIbHdUdWdkNGdmNVM1SThvNm5INGR2?= =?utf-8?B?YkV4R3RyMU5GbTJLcHNxdzlaOFhISFNnWUNmSXp0SllYV0dTTjhaWFprcGRP?= =?utf-8?B?akRsQkNZTnV5LzhSM2ZxMzhjYmx2K0dJcHREQmpnNjhmeFo2WVYyQlpkL281?= =?utf-8?B?bkhmWFF6VlV3N2U2NHU2bmY0dmd2MDhpQUN1K25oNEdKLzVQS0t5Q2lvVTJW?= =?utf-8?B?RlBGTHlUWVhCMjY1b2ViOUlCb1NPejZuOUgzNElmWTBXeVVlQ0FTTllaajBV?= =?utf-8?B?MkVvKzUzTnB2dUlCeHNlVjd6NmJKc2RobEE4endaSnZFRjNDdXpOZlcza1BT?= =?utf-8?B?Nnl1WktKRjZGYUM4bFVTTDh2NUJMckREd0JINmtlYmJWTzJOMHdoOHV2OHFw?= =?utf-8?B?NXhxcjZISy9FR3hmUHUxMVpGOXNVbzVRZnE4cEhwcFZxd3BCUWpkRTk1cVg1?= =?utf-8?B?SklSNWlmSE8zczVRMVNxc0grOHNROENsTi9Dc3pyVWRQOTJLMHpEZDVON1E5?= =?utf-8?B?eU51Sy9DbEZHcDRHQ3ROYkVCS1JuSElTNG9HcUZlL3FtZWluOFdkSWZ1djdt?= =?utf-8?B?OUEwbjZQUDhmZmlCaEhuUXdpdHlJcy9JWVJYSEYzM0M1c1FXYVBGWDROOFIw?= =?utf-8?B?enpOSVVTMWVXSzZKQXpFZnhCUlZya3UrcGJkakZCV0RlUTFMa1I3bk9BL1d3?= =?utf-8?B?d0ZnQWkrVDZpYU9ZL01vYU5PU1JKUGZBaEdTcGVLWlo0TW95cEZiZjRYbHV2?= =?utf-8?B?ZDZ5TVZYRHRMNHpqbERXT3oyajVOeHpWeU1Rek91WE8wZk1FS3dBVmRuK2Ft?= =?utf-8?B?WVVnRVVKemUrRkdRd2c3aXlNelRBQkJnL3luYnMvL2NaenhuM3kvdGVOak9I?= =?utf-8?B?dXF3dVJuVXg2SlFWZWVwY1lBWHFyR2xaSGd1cEpkRVJNdGJ0QmIvTUgyTlVZ?= =?utf-8?B?SHZCYSszUThqbHJ3R2VvdUEwdnJLNTNUM0tvb0c2ZmxKcmluNmdxMG5FUGdL?= =?utf-8?B?UVdnMGZ5NUJtaHR4T0pBWGRjWmZkK1BteDlLcFVNYVc4MXlFR3VTcDJhTkJ3?= =?utf-8?B?RVFRaDN0UWozbndHRkVWNytxdmRFU1ZRc1pDUXVSYjgxalVvVGpaS25kUkFz?= =?utf-8?B?RnJQZHQ1Y3hOczh4dEFNb3NoZWoxb1dXWnNDei9tRU53Ulpnd2FBZGxCQXlk?= =?utf-8?B?TkpXSFg3bmQ3Z0N5amQxRklYdkFVaFhPRmYzdCs2bGR6UnIyMkhvTU4xc2xq?= =?utf-8?B?MlVVL2FLN3Y1b0ZZQU05OTFQMytZNG9qTFB2eDhGQjZlODRQUWhWSk5Ncmh0?= =?utf-8?B?a1MyU2ZmdkVBUmdtbTIxTmY2NmF2WXh4ZnlnOVg5R0dqMk1UMHhJU212L3Nk?= =?utf-8?B?NDF0elQ0QVM5WGlrTGplZ3NNdUkrMFBESEhWeVh3L2dpS2dkOU9zZTRTOXRF?= =?utf-8?B?SFhIY0YxSm1WV2tqckhFaXp2aUthd3BVTS83dHhIdmVTU1hvZE9MOEthd1hH?= =?utf-8?B?ZWpyc1djeVlqNjJOQTNMMnI1U2R6dTVlWVV2VXZEN2tKaUc0U1pPM2dSVkli?= =?utf-8?B?R292TTRHbE1STzZNNjliWEd3T2dScFZwYzJncGhqRm4xOXN5NnpZSHNZMXRC?= =?utf-8?B?RXgvMXl0N28yVldDbnpSMk9UcjNZVkVETTdkUGZzWjltWXAzUmlUbFBwWm9t?= =?utf-8?B?a0JkbjVWNGRIWUQzYzlVTFFwMFRieml1MmovWXFheis4VU9DYTByV0M0NVhZ?= =?utf-8?B?ZW1LOWFEdzlKZDE0REQwQ1QvcHE4NmN4Uko5UndqRjZaZGs1VE5SdlppdWRm?= =?utf-8?B?YkVlUEpqNzJ4eHlNUG1wckNSOE81Y0lPVURmQ2JDSy9pSFprTmFqZkFlWWw2?= =?utf-8?B?K3R3V2hkRkNiYXUyNnNiUlNvbTJkZ2szSWlFTW5HdEorYStTVVltTThKR1FT?= =?utf-8?B?U3lMb09PZGRJSFhHTjhuTFBmOXI5bzVoNGZIdDRQZTVQUFFCdVl6bkJ6Wnpz?= =?utf-8?B?NXlsZ0VGU2tjZWxybnN5SGQwYkpoa0g1TDZFT2hwcEdBZGFjamEvOVhndEhE?= =?utf-8?B?YjVKa3VHeEg5SUxwbHhWcFpEYk9qWitNekpBU3hrTDlCakJDQjlqTUlTNExu?= =?utf-8?B?enNxWXJ1bndGNmt4VEhzRkUxZXFiS0FpUnVYSFNpSVdJcW9DOUxhRWNSUXhZ?= =?utf-8?Q?E8Dnj9VysrhUTOr8=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ee304e0-2e23-4776-1c9e-08df0840d81a X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2026 15:51:10.7643 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EOKE1j02B2yuTqFHSm3ZjX1oG2PiL0G25y76Lic8NeHH6Sh+P8tru7Dg0AwSOWX2R3inv+r6j1/DSLLWz4lB24b5JdUrkWnTSei7Oa2hAAI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6610 Ack Applied to hci-8.0 On 8/31/26 5:06 PM, Denis V. Lunev wrote: > Backport of the upstream series fixing an unauthenticated crash in the > VNC websocket handshake. A client which can reach a websocket port > crashes QEMU before it has authenticated, by sending an HTTP greeting > whose request line holds no space: > > printf 'stats\r\nx\r\n\r\n' | nc $host $port > > Three defects line up to produce it. The greeting is rejected without > queueing a response, so the handshake goes on to flush an empty buffer. > A zero length sendmsg() succeeds and returns 0, which > qio_channel_socket_writev() mistakes for failure and reports as > QIO_CHANNEL_ERR_BLOCK with errp left unset. The handshake treats every > negative return as fatal and hands that NULL Error to > error_get_pretty(). Patches 1 to 3 close the three links. > > Patch 5 is the same NULL Error on the read side of the handshake, where > ERR_BLOCK is folded into -1. It is reachable for a wss:// client, whose > master channel is then a TLS channel: a wakeup carrying only part of a > record makes gnutls report EAGAIN. > > The series applies to the branch unchanged, and the new unit test passes > on it. > > Upstream posting, reviewed by the graphics maintainer: > https://lore.kernel.org/qemu-devel/20260831100151.914178-1-den@openvz.org/ > > Signed-off-by: Denis V. Lunev > > Denis V. Lunev (6): > io/channel-socket: do not treat a zero length write as an error > #VSTOR-143316 > io/channel-websock: send an HTTP 400 when the greeting has no space > #VSTOR-143316 > io/channel-websock: handle a blocked write during the handshake > #VSTOR-143316 > tests/unit: add websock handshake test #VSTOR-143316 > io/channel-websock: do not lose QIO_CHANNEL_ERR_BLOCK while reading > #VSTOR-143316 > tests/unit: cover blocked IO during the websock handshake > #VSTOR-143316 > > io/channel-socket.c | 2 +- > io/channel-websock.c | 10 +- > tests/unit/meson.build | 1 + > tests/unit/test-io-channel-websock.c | 249 +++++++++++++++++++++++++++ > 4 files changed, 260 insertions(+), 2 deletions(-) > create mode 100644 tests/unit/test-io-channel-websock.c >