From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021104.outbound.protection.outlook.com [40.107.130.104]) by lore.virtuozzo.com (Postfix) with ESMTPS id E9912802A7 for ; Tue, 6 Oct 2026 16:28:01 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dRlgQ3D8LEJF61nkmDINau/MwgIIYWYQJvmYStRKEjAzXVDJe4Nr2ao4Yetz1q3GZ1S0wd/tpZhlUsyfXdS4lgzVnTfmmY7wmh80I/df5pnR3EIKj2stEhFoKCtaaDPKKlwY9mGaXQL3euGu72wxWZHHHwUOalBUgr0YKaWC92oVCOpTU3Csl0XuvgrxJh3OaiAPZXq/UVc72XWfT9eJWu1a5HFKKKDpItZ4wv1jdxpxwXpmGVrDicMs2WW4XjF+xEYG/HJw95YJqCt/YrMdWiI/FuUDo+j8ZdiDP9j5kVvM94FsImVyjU3SX2MHTbpa2ZBrhbeKUac2ss33371Pog== 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=mBBxD+4mMCd1ELVggNJSoStyHPCfNZrX1pknWuDYEck=; b=PJLksyz3SaScUvxU4bYAI+nwRUiUuFrLrdC87lzp4QAzXVkdsvVeWzI9dVWaEnJgOSIbb2GTcDEeSw+aMo5i2Z92urpaPvOpnZHZl2+hqnoWq1Br7r34ZZ7bxTlg9L6gSCGSRHMw5l2lYM7AtuVzmadYaubWBYnhrORE3CcYGTJIc0eFT0grjd5h2J42ZAn9YNKOsGpBVYtNAew1MtrKUBqnkkXauZ9W4k3SdFZFcohzChY4rnsNY3Ou3bSOB6Gr+NblXjouwm7ASY3wM5w9BMGASN9HU1xyQGIvRcRbj8I3pHey8mZgyTdxSUsV9bCUi8xKTJthMOZVSUtbNUYJKw== 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=mBBxD+4mMCd1ELVggNJSoStyHPCfNZrX1pknWuDYEck=; b=sRjggrbMzS0/ZjztGJ7+Mjh1KsKVssjsMU0PlYJ1GsRYEeV36vUCDrmBXxnPItrUYZd+c9OAvaBg6ij6n4SkqKe+echjUa6WFC47tZHho7juoP9xBlfbAslsgwm6F9Efi909+gtQPFGOfKzqP7iojVyrWd00L6GvFhXgHdd3PH9uqxTstWYND44q4PJmGDhYjgXeXBudMlh9EFPl0hwg/Qanph2s+/dqdQx3zsLyte5Bu4+V5gm2fPVBMv7DnEzwHwbVdS9mxGFzgmhIjVOa1aQruu18aNBQ2gK1yG8Lgn0+5dPAfEE+RQIV1B8uFAV8Yxfu7Lm7Gm993YJWTEaLQA== Authentication-Results: mx.microsoft.com 1; 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 PAVPR08MB8848.eurprd08.prod.outlook.com (2603:10a6:102:321::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.472.15; Tue, 6 Oct 2026 16:27:55 +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.0496.010; Tue, 6 Oct 2026 16:27:55 +0000 From: Andrey Drobyshev Date: Tue, 06 Oct 2026 19:27:52 +0300 Subject: [PATCH QEMU HCI-8.0 v8 01/14] 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: <20261006-usb-host_v3-v8-1-72ae4fb8977b@virtuozzo.com> References: <20261006-usb-host_v3-v8-0-72ae4fb8977b@virtuozzo.com> In-Reply-To: <20261006-usb-host_v3-v8-0-72ae4fb8977b@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR08CA0230.eurprd08.prod.outlook.com (2603:10a6:802:15::39) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PAVPR08MB8848:EE_ X-MS-Office365-Filtering-Correlation-Id: 34d064e4-8bcb-455d-8377-08df23c6c65d 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|52116014|1800799024|366016|376014|23010399003|5113699003|38350700014|22082099003|18002099003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: Bn3fJ/HZ2+ohsjatcWhuBOYxi7NVG3Z7V+j7wY0v0JMes3RAxTCwBH4Kpns6rmUsWyfgPHYZ7ccjmhGjWrhZP10Jp/TLtHBeSMSKS+ODcrS0Jft6lertn58R6xchOxUCgNFV2qQ1I2Y4sS1T46/KebQk18hqfenv2275PNAYMb9tbz3RL8MpRDKg+CtWdRNmrYZr5xCni22B964eBw5oXjZk7uCqg/xU/C0+MwITX5lwysKpqos1sn+XeRM3kZkOKEPNW238jz4aKG9JBojRXD0XC04icdXU3wxiumMPFXC8YBjruZNfJHl1zPbGsgtC7Zgxof3pDha8TURkPPGR8SbA2r+8P8gBkuZIzuH53yLEt7cX/V+D9zTgTCWYojGwjj7Vm3vWfAwRJl+Ii5Fc0KzMMzjWMaTJv3SuSA8Cem1zXF8jfmSLGd5S62bSH9h3Fq6Yqxp89dAm3RDHrIuSG8lUNvU/1nF2zcIIc8/WbQZSnis3g8dgu/2lLkhWgVZ0QbdRfKhLvOGAK/Ae+q9vpI3Ow2KfstSLTL7vKkX/aqMTTfVyNXlJvl4vg+bX/Jxaj5h//1nFOjIp4g4doB9OjTNsqufER2JwK/f/Qepf5H47ARKJyXsW5rPvU6PrzCzYz6LfboxmNjzWlUisAhFTUwZzqKpSHPRt3M84JSrDN9JdxXuudvi2Sqo/sZ0+PRzqnSnIdEMVQul+uUnFA3yxpml6gtvqY25cVTBKACZoPhU= 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)(52116014)(1800799024)(366016)(376014)(23010399003)(5113699003)(38350700014)(22082099003)(18002099003)(10067099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WENjdnptTDg0cVZsbU4vcktMMWhueE5KUUszdStNSldReG9hZlVsR1FmdzRa?= =?utf-8?B?NDNORkJta1A2Q01uYUFQYWhEWDhwV2ZVdkttam1RQml6cWNFc1UxZUM1U3Iv?= =?utf-8?B?TitDeHlhSVp6b05GYmhlWitaNFpEWkUrZXhmaFovVTF4UUZzZ3dUV2RpSzht?= =?utf-8?B?TGxxbmpXLzFXdjlsOHFnT1FHRGpWdEUxQ1FoWlhjaFVGYWVnd2lodktod1pR?= =?utf-8?B?a2ZWYm5YQzhXckt2cHdlZ0IvMXFHYnpEdkFHMVdJbTc2czhsM3pxYlVKNHd2?= =?utf-8?B?d3BwQmVmdE5pQk55aEtwVVg2VDZoS3lxWE1hNE9qdHNCNkVNNXJzQ3grQ3dW?= =?utf-8?B?NXF2Qm5BdjRGcE5abkpDTnBUL2VPRy9JemRjdEphRkRRbE84QTZkZjZtY0R2?= =?utf-8?B?QnFIQWN2SElQVzJzYmlNSWlzc283a0NINGtvRVE4Qy9HZjQ0YWltUVdVYldi?= =?utf-8?B?VzN4RDlJbWJodThKbVNldFZlUmVpVDVNWStjenZkME5WSjZWR0FyS1A3aEdF?= =?utf-8?B?cEhjUG5qMTFrcDl2SVdhS09GSTV4VWJMak9CL2YvdXZ4cFkzZENtbTBrUXFN?= =?utf-8?B?YWk5WVB0TzU0TE5EWTZiRXBhSVh4T3podVhYOFhYSkdLTGEyS3pINXhpYXph?= =?utf-8?B?RXk0aW1kVFgzWGxkQXJMdDJ5RnFNMFo0ZEkzQ0dxOVRCQWgyK0cvVnlPUFBn?= =?utf-8?B?aVFBdWVQMTZGQ214WVFORGlua0hqZUs3MXFQK1NmUFBGbXlhUVovUjFJRzAv?= =?utf-8?B?dHZhYkhpU0NVNHE4WXBicUZYeTVPUG9QdU9JTW1iQ2pkUERKdVNsUkhLakFC?= =?utf-8?B?SS9adlIyWjVtZUpwdkxsdTZnbmpPR2hubDBaWEgrZGFzWjBSZG14RkRPQ3Ba?= =?utf-8?B?WG9wNVhBNThSdlZyU3BZMlp0N0x3TjVSeFoyTXVNMDVZV1o4aFlGT3NOeHZB?= =?utf-8?B?aThCMG5aZFBYK2RpOW5DYzRrSC8zTWlRZ1lUSEZMaGl5ZWlWU1JEZ2RSay8y?= =?utf-8?B?Z1FXUEVzQ1hGdEV2QnZrOEcxRTdEZ1hUZHFrU3JtV1VNSngwUi95OXh3dDRQ?= =?utf-8?B?djZOQzBIcnp4TGRTN3JKbWZMZURNNklCeTlJYUZ1TUFjdjBQRkxyRFpRR090?= =?utf-8?B?NkozWjNBUTFaVXE1emhRNlkzZDRoRHRtTUpvakV6S1hqSWp3Ni9rL1FROElk?= =?utf-8?B?UHZUNnY5UXFxdEZlRUVMVmlqWDNQdldhSkRCVDZERHE5Z0VrOWdIcjJEcHFF?= =?utf-8?B?cVNsdDlHaTBDLzBoMmduaElnN21NZHAzWTduelFLWkRBTTdybGozbjNTeDh1?= =?utf-8?B?aEM4eDAvelJXTVgwQXdkYzVaeUhhd3lTZlFlSXhCYUk1eGV4bmJTVFVxWE83?= =?utf-8?B?SW5ySnd4Z2RTSWM4RXZqR080YkM2QzJObDdBb2I2MlJhU3lnakZaOHVpQ2Vr?= =?utf-8?B?S1JTKzBUeG03UWhlYmtLYk5pQy9JZjBCZTI3SlZiOUFINjRBdG8ydzkwSHpE?= =?utf-8?B?MmtIcWZaS2lqWmtGVFhyTGtEZ3FYMTBiKysrcTY4alBNUEhjNlpCcW5LR3pB?= =?utf-8?B?RGViaVp0YWhiSFBhT1ZOZmxjb3pJYjNVLzlVeHV5T3pMZVlHaVRuZzZzREl4?= =?utf-8?B?Vk9FMkVTM09ucXk0NmRRZXl3U1R3YlNvZ3JYZ0V4UnczYmRxWGhXT3lwNkxN?= =?utf-8?B?bDFNVEJFZVFMMnE3dUNTY3ZwdGRNMzNqclgrbExYNzJDMEtKYS9QUjIyUFN5?= =?utf-8?B?L0RBY09JNzdyZ0xOSk1TOU0xcXQ2cGhwQ092aTdNbHNxOENJQ2hBdzdXVzl3?= =?utf-8?B?ZEFKZjRUbnY4RHpYYTBUdnY4cUFMYXBxUTlPNXA2bmhkMi9iNE00MDRXbVMy?= =?utf-8?B?Nzc1ZlhFZ3hDM2Q1RGRWOFhqMWZRYkRMV1N4cjhXUUc2TnYwRnhqM081MWxB?= =?utf-8?B?N21DS2Y0ZSttbzhnYmhvY0d2YWUwRHd1RG1OMWxaVGEwbjV6dUowYnNlaU4z?= =?utf-8?B?MDM5Q0pHNEtOdUVPL3dYMjllb1lRQmVmZ3hzWjR1V3NXcUE1Z1k2LzF4WHRW?= =?utf-8?B?WG9KWjRnbStxTVJLeXV5ZEVtdFM3NDRKbjBYa2JocjdUT3hXeGJDTmhhSW9Y?= =?utf-8?B?NkJ1eFNtT3dMbWdRZitGL0plNjBGZ2k1SHQvcDJVRzZKMnFOa2dqcUpXeXZW?= =?utf-8?B?SVpkT04ySHVtbEw2dzduanRMdTlnRDhWL1pVbGRpUVRpaEpob05sdDVhcUYy?= =?utf-8?B?OHJtb2FCSzVTeU9QK2hLbFZ4Rkh2ZWg2clFWRWV3Vk1zWGNMbmhEa1hSdTc4?= =?utf-8?B?aHEzSUpjN0cxYUJDSy9iWmI1YTB5MGcvVHA1c1ZWVTdtNUtKOEE4TW0yQjJ5?= =?utf-8?Q?k0CB/PlEGJYW72q0=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 34d064e4-8bcb-455d-8377-08df23c6c65d X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2026 16:27:54.9498 (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: i/J3uR/ZxrwPgd2Q8TDAm04X7dfrSy36uHtuqAJ1fnwAiZ98rxIjWupiYQIVXlUgGS9bvfPzb9YShQqjysoyOHsXoXFWEiZKfngudlu5+8g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB8848 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..d4a8c68e6d4 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -961,6 +961,11 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev, int hostfd) goto fail; } + /* Track the caller-owned FD so the fail: path frees it. */ + if (!dev) { + s->hostfd = hostfd; + } + if (dev) { bus_num = libusb_get_bus_number(dev); addr = libusb_get_device_address(dev); @@ -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