From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11021139.outbound.protection.outlook.com [52.101.65.139]) by lore.virtuozzo.com (Postfix) with ESMTPS id 81DF28015B for ; Mon, 14 Sep 2026 19:13:21 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=l/GuoRhDAm21zVJE72/O25rkX2d+fjiIK5+5mR3fpPQhF7Pgr4R0s5qImcOspzq96/KTIBAwhgDOMWaz4/oKdXneor80pZoIl4/NrBos7Zi84qKsIru1WRrDa8f63wH9Ztdd6rYTswKc7+T3gloW9iVvlzWMxN/NmFxf2yBOXjDTNnlBmndR7Xr6tItyZnN6PISao+cGVqkG8hOJBl4fcOrfPbeNc1tIR8weoP6MZAOwD/t+2Siuy+z0J0M8L2WPUG3Nj/FiZ6FKbJhc8eyJQExKD7K8+CfHA9wVvApZ0a8H4IyVpwDIVB4w+g5antJbEjEkadMlw6ful9K9BVIhgg== 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=CGhFL+/vVzKKQWmFE9RC3rX8rGR0OopRuqnftPMMSbc=; b=PnqMIR/0OpHtFeB2UaWN64UtUbCQspFdx6LLV6dohd6vAM4M5g/jhzlAhJGtza8s3LY/A+lGnUzH0QjXZj+CpTFSDbpry0XnNeVLVC3R7X9Gv8DNaFJ8kq4gMZKuvIhNGmjQzrS01etuBbZY233nsVzP5VZ20b1j2J32BhqqI7w5na5dL0LBiDx+QZi4xst7syQE6QQ2o5on/awH+avtyn9UHsu9eijkzEmtcA8oNxkCsba5jThYXO7rzghUpU+BuP1PBUbjSMl/oTdPLvdvocVjCiCOzPsZdu/Of9uvoMJ3nAkwjejSwxF3z88BirNgHufq3Y1HCcp69gst+8PnUw== 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=CGhFL+/vVzKKQWmFE9RC3rX8rGR0OopRuqnftPMMSbc=; b=bD5FbCSN39BGW5LoVkeFxInuNHxgr3Cm7wiGhN+2BI09tQ/z1vxTlCTqVQbiqzFILG1jFxEDxcyNkfN0DsMv2H/A530FcEPP6u26EhOp8EPq2Yarhoht1haABSzCP6HHhgqpCdzKhJkAyi+T0CdkdA6TJfe9mSzIrF63aM2tlfuF7tDLGrtr9EGQ9bYrG9pYaIDJhk/wZSZ5VsYmQTnAYlHAPvmCGbpwEEFGaQVOV6ETaM3PT5+LuxmIU+Nq9fHDMFPoSvzkv1znMy2xJeKLrMV3FzlPp0LcWaKcELWFPoEENedZUvXAt6hFOiX48AduQZHlZf6jp/MRbtGbiXbVAw== 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 PA4PR08MB6192.eurprd08.prod.outlook.com (2603:10a6:102:ea::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.8; Mon, 14 Sep 2026 19:13:19 +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.0428.004; Mon, 14 Sep 2026 19:13:19 +0000 From: Andrey Drobyshev Date: Mon, 14 Sep 2026 22:13:09 +0300 Subject: [PATCH QEMU HCI-8.0 v3 01/12] usb-host: don't leak hostdev FD on open failure #VSTOR-137800 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260914-usb-host_v3-v3-1-c43a834ce016@virtuozzo.com> References: <20260914-usb-host_v3-v3-0-c43a834ce016@virtuozzo.com> In-Reply-To: <20260914-usb-host_v3-v3-0-c43a834ce016@virtuozzo.com> To: svt-core@virtuozzo.com Cc: den@openvz.org, andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VIUP296CA0097.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::17) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PA4PR08MB6192:EE_ X-MS-Office365-Filtering-Correlation-Id: de8c61e6-a2ab-4469-04fd-08df12943c75 List-Id: svt-core@virtuozzo.com X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|1800799024|52116014|366016|376014|18002099003|10067099003|5113699003|22082099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: 3Q6x6HsXANwcHPc9QR+IiNgfgNxq/z2EiM3LxE+ayN29Qjm+69QlxyW8RTv0EqKv24WvwQdoCb4eFmbdVT4o5oxTtl8jDHHlrgWNMr3Jglj0s8d8T3ia/jSBF5RRGzVqRgzATcHbMfNYKvoc/WV2/zrENyePGjJtggo6GE5eo7OXkUhI3Ax2k6XpKhOThuV2R4mr4qCgHqCH/DMBIUZnJYkLQc0Ah4pKW3NhxiEhcXGAWZcw6Gj2r5prfP5va1Ka4BpiUcSbNTKzNQMPqbDmsjCDc7ZdGIPgrXMLgLZyMPFftimPLExkpS44kgHBhguxjMWpHQkp71KlMd4+eZ2Fo3unsfveIjKmXlFpcpZ9b9Si6+pXp+nEnSx3jfHldK/0HNVBCIhnC5+Mq2WflWLf+lpN1a7jwrQ0JqVbzlUpw6BhMyUyCZBe8uob1hIBdeOZbqWRx0ld1bpIHafGdODZIRgULiyzkTvlt6yJhVgrDIgC/JAv6zGDuCr5GxinDcEhdPNppQID8i87NmBMIWCRk8Qoxy6PzwP79gviDU0UcNgSxPBFZXXWUxhGUBW0CTbSApj7M7/Lcz1vPsxc+iUON4RfmQPEFhhSguL4k/aR51edK4KXSgavj5ORCB9wjAU4HHG0ZrMfz6ZFKmN6C8EX7COhvTEst0wbLighenxfDwfJ4uQbm1bJV8EjGeCQFDHcKHHspxewQDHa3Qk9tJ6w4HsJT7APadYgTqT6dWeJv90= 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)(23010399003)(1800799024)(52116014)(366016)(376014)(18002099003)(10067099003)(5113699003)(22082099003)(56012099006)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SjFwMHBvYU5qWjJ2WWVBN0hWZkRZbFN5c0hMbTVhR3R4SlEyMVlScXREK2xp?= =?utf-8?B?RjVDb2YyVW9HR1ZVdmZxVVhZdHliUzEzRTJVem80UlRpUDM1RGdNRVlLaGRT?= =?utf-8?B?elpJaGoyRlpnS0k1bHA2VTFNRDRYaUl2N0JpZ1V5M0k2eUZsamhUVlFMNjcy?= =?utf-8?B?Tm1EUm1qY1d5d1hJeFM0S1ozaGEvYTVzSHBmQWFtRFVuSHpCa0RHdGRhc25i?= =?utf-8?B?T1RpckwxMWcwMGRHODF1QkgzZmIrRDZONEYrb1BQZk5PQVVidTRpQVZTNmRD?= =?utf-8?B?WWloVjg5d29Tb1ZKaWYwbFN0eUdNYjdzejJjbzFhWTFTSjQyQlpXYlUwR3dP?= =?utf-8?B?ZXVFbnFXK2w3RHpHVnVWc0dXRHEvcTF5anhVVWp4YkZmQmVvMy8rMG1ZdGVp?= =?utf-8?B?eDY4c01wblRTbVpDcm5pT2MxdDFlWWI4WFhyVEFTblpZMlZFSTJOUC9jSlpI?= =?utf-8?B?bHdDMFFKVEltVnpDUjQzV3Q1R0dlcTVIMlVGTzJzVG1abWg0RUVOV1hueFJu?= =?utf-8?B?VjJmSXYvMmRGdGNGSnFkSitwNUxoaFNuWE5vaWFGbWozYmxKQ1RWZTZCOW9O?= =?utf-8?B?c0FGcWZvZXptc256Y1NlQXpOWDdJVmJKdnoyR1dWakpwVStwaXF4ai9DOXl4?= =?utf-8?B?Z2NXcEVEcXA5dE1vemF3UEIvbm1qUndrTkNzZjUxdnJTbEtkY3ZmSTZ4ZUNG?= =?utf-8?B?allIQVQ2ODl2U3V6LzBTdnQ2Q25ZdXB4SWp2VWt1bGVQVDlHM0pmYVpwakhH?= =?utf-8?B?dnZwcng1dXVXeklZRUtleUFZYjZxanYrdEFkdkZIa2FLRHVNUXNUVG0vV0RH?= =?utf-8?B?RVkvcHA5M1plYSt0bXFnRFVWSkdNV0IwUjZ4dy8wUlIyc0tuRE5TVFhQUVBw?= =?utf-8?B?Qnlsa3dmU3NZQ1pucm1BRDd4WVRCdC94dGxWQlR6SjJOTDVNdFBBc0orMFdQ?= =?utf-8?B?ZmptOVVNdTVqSEo3SjZqMExvNTJQSlRPODFzbWRWZlVuSXo1N0orTzlaTkZq?= =?utf-8?B?N1YrTURIeGtMWGhPbFJmeGVnWGR4ejZnZHlyWkpaOVZrM3NEK3k2VTJsZ0dU?= =?utf-8?B?NGUwajluYURyaHB0THMzcVUrT2FUU3Q1NWRQU1hpY25TQWM4T2p3dXVyRWNh?= =?utf-8?B?ekl3Tm94bGZjTFNhR0VUaHFuY1dLK2FjQVUvZEo5NmFQUDFRQUpJaXoyTTVy?= =?utf-8?B?bzVOSEF5bC8vV3FLN0pZQ3NRWnNQY3kyNTA3TlNBRDFTaXBtbmVZWi9nOVpQ?= =?utf-8?B?VGR6alpRNFdLcUw0UzRkUXpIKzQ5N25qU1dQdm5QUWlycDAxQ25yeGk4M09n?= =?utf-8?B?dFN2NE5zQjIwRzFxdnVQMVR2ZDlkaUR6dlZLcnIzbHNNS0ZhOTJQb2NHUm1U?= =?utf-8?B?ZitLd3lNSWwveXd3N3REWFJWL09iRzZKdXpTdkpzMVhtbS9oTkh6OHY4K3Vt?= =?utf-8?B?UzF6b3d0dzA4RytSSDBlNy9yb0phZFZxeStPKzd0UEZ2YVNCVDRaY2VlZUNj?= =?utf-8?B?dVI2a0FxL01BVGJCS3d4OFh0NitYNkRTYUNiOFNRcDFHWHdUVGo4b0owSDNv?= =?utf-8?B?SGtQTXZDWXRoUlhSME1CVFJkaTh5SEhxQXdlMHZDM01rdmxncFIwMTc5eDcw?= =?utf-8?B?ZlBVdCt6LzZrV2Nta2tYREx5VVF5VHIrOThFSk5LeXROakVXZEF4VWhjTmk3?= =?utf-8?B?S2REaGRmVGhMeVFqT3dDSGJCNG9RaE9kTWwzc1R1bVU3VGdwa2FSN3g0VVpJ?= =?utf-8?B?dWYrRHJNZWkyR24reXlkSVpGMTV6cWxKSWxIL1RaWGQyK1BwR096azRUTjFx?= =?utf-8?B?bnVYSC9BTG1QZHNYQmhrcVM3cUNQS0tEQ0Y5OHZCbTUxcEF0aU8vNWphbGNt?= =?utf-8?B?RmpscThZcTltSU5PT1dTMG1YeVZ6Nis1Z2R6d1VRSDA4SVljMXE0SVVRZTRj?= =?utf-8?B?QklKNXhzSVRRUkRaVDVWbTFoL2M2NnU1R1hHZm9FcXFtYnp2K3F2Y1JHMU1U?= =?utf-8?B?MXplbG4wNFcvblZDS0lOTFoyTysxOHVsblBnK1hpQTJhcWRzbEcweWQ2cXBr?= =?utf-8?B?S3hjakNPU092VzNDUzE0M1MxMEhucy9hamJ3MlBWZ1QxRU1icGdUQlhmaDZV?= =?utf-8?B?RFdqVmh3QkNKNjgzc0VSNGkraXp3ak9uR04zZnBZQUt6UlBjd2QycXV4Mmdt?= =?utf-8?B?R28yMUNCN1d5N0IxaVlaQnVVK2RRR1RQbnFEVGZBWmdTNVZNaCthR2xNRkdP?= =?utf-8?B?ZG9oOFRHTWp4UzhsTkVNdFUrbWhFRXdFN3E4REJpellUMXBIVzJFZ3dEM1lL?= =?utf-8?B?UFoySG1uVmFyZTJOK0hSL3F3OFoyUmNicjJucFlJdlhrVWpsanZWWlowU1po?= =?utf-8?Q?dkgKMdMImU/B17o4=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: de8c61e6-a2ab-4469-04fd-08df12943c75 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Sep 2026 19:13:18.9844 (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: jqSgFmKUiyYrA/sBVULuMg7j7niCMBEzYbAXuC94wHiXBcJvvIYpCdjaEs3IRrGxLElgoJzIjHDR/QL9briXQ6wHD52NwGDRejUEUh+1tEQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6192 The FD passed into usb_host_open() for a wrapped device is only stored in s->hostfd after libusb_wrap_sys_device() succeeds, and the failure path doesn't close it. if wrapping fails, or a later step of the open sequence fails (e.g. usb_device_attach), the FD is leaked, as usb_host_close() only runs for fully opened devices, and the realize error path doesn't clean it up either. Store the FD in s->hostfd before wrapping and close it on the failure path. Signed-off-by: Andrey Drobyshev --- hw/usb/host-libusb.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index b74670ae256..83645fbe0ce 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -954,6 +954,11 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev, int hostfd) int rc; Error *local_err = NULL; + /* Make sure failure path frees caller-owned FD */ + if (!dev) { + s->hostfd = hostfd; + } + if (s->bh_postld_pending) { return -1; } @@ -978,7 +983,6 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev, int hostfd) if (rc != 0) { goto fail; } - s->hostfd = hostfd; dev = libusb_get_device(s->dh); bus_num = libusb_get_bus_number(dev); addr = libusb_get_device_address(dev); @@ -1066,6 +1070,10 @@ fail: s->dh = NULL; s->dev = NULL; } + if (s->hostfd != -1) { + close(s->hostfd); + s->hostfd = -1; + } return -1; } -- 2.47.1