From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023112.outbound.protection.outlook.com [52.101.72.112]) by lore.virtuozzo.com (Postfix) with ESMTPS id 8053F8017D for ; Tue, 6 Oct 2026 10:34:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AoudaJIPWK7hnrbFEFduYBQcnGz10AlMBbk1iL6ckRMOniSQRItTf4vnSDzgIY1wJGB3EiVTkYqrcZ1O0ZJ1pA60cpVcegsDuhklxmpQlBGYZlyhIGXnB2I5i7UUR+0iV1ojRORjIsmnm6h4qgowHk5dQT753MAFwXxWlYwHxfqi+lOOOrargZeO2Cife81EUyuLUA5x8PRK6f18f+Glr/zt0lkVUUtp4X+K/92vfKnoFRa+lwQyxgvxLOpo8pH0f2+X0kPrjVDXvEOfGaa5jRpEH+cguwyN25MdWTs/TnkDjJPAn5OUTfdGvHISCUZDz7mLIShpzFhZGIaPpfxUpg== 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=fcv0oc+wjzug/PCxrfJqvYrEk3Mzou2wkpWiVRMKWZ2ECdWNsns+l+yGXbn0iEkiSXu3eqZfjNdmGbZHXSnrJktYS6uZVu/HWNYblj1qq5242yN3bZOsBcsf2UWR4R3FHnbCY8WFMj+4cTZNaxogqNBXiRciOOTuJWDzrBhvxjQS2eEbvdhUrXOUF0oyn1y4RvwseaReE3dyNQYb9G9KE/103aYQWFy11D5lduQBOMzytX+gHrOyAh+O9juvKGGdxZ3XJNPGxp54ghFUNavKWS79XeDXIDUBFstwE9p5NCRBvUohHVjDETc/f8TdPA6xGZExS5pGwzsxMan+iqkvrg== 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=KB5f+9znDlct7ZTOA55Uk1Y3UUh78yLXuxRHmMdKSYkOkv3E+6ZsRlLBpDiSDEwocwvn668S8AoLahIpE8tQIgAH5nSPW6fo9NPsYg6vt274B3orskPwH4VNbuApSsAxj9q+Qo7Iqiryh0Rf6u2C069tWyU2c6hTvbQeJjmnGU0DU5Gfv/z+jE4aqTbH7vYBu8Y9tFjKDks8b6AlCAY4r6xR08pPvNA2KAXaKQlYbt6TYMBC+yXRwaF9Y/K5nQHnT2MgLPByQn1UB/xRBHIqfDlui4b3judpF9mDCiWcCyrlvTabvbIThLOSO/g7utniaOo52ZIATreq8bS0HZ35zw== 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 DB8PR08MB5515.eurprd08.prod.outlook.com (2603:10a6:10:11f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.14; Tue, 6 Oct 2026 10:34:31 +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 10:34:31 +0000 From: Andrey Drobyshev Date: Tue, 06 Oct 2026 13:34:25 +0300 Subject: [PATCH QEMU HCI-8.0 v6 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: <20261006-usb-host_v3-v6-1-8688ec9576d1@virtuozzo.com> References: <20261006-usb-host_v3-v6-0-8688ec9576d1@virtuozzo.com> In-Reply-To: <20261006-usb-host_v3-v6-0-8688ec9576d1@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR09CA0115.eurprd09.prod.outlook.com (2603:10a6:803:78::38) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB8PR08MB5515:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e01c376-5c63-4717-c91d-08df239567ed X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com 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|366016|23010399003|52116014|1800799024|376014|22082099003|38350700014|18002099003|10067099003|56012099006|5113699003; X-Microsoft-Antispam-Message-Info: iUtytWwWbNpte7X/0zlIyZNOmwoQDkMALzys1vSLbB8+/J06VG+DJEP7EtGdaWYPKU9uVfg4HD/Zz8c9tOzqXPhPhR6tPAIk+L6pH09s5FWYyAPkLISTQDGR/TBu9/NbgBoyazWnLU2mbVtu8NHh2tRI6YMSnMRTNP24sYqKSkDgfdwUNEU6oIUWZ3uZ3hvDyWMd4XUZCP9yq31Wpfb4trZ85td1tLzUKopIc49WvBuLyfkDbxR/ZcAp2yD6BfZduCKRgYElFfjxagG5xqP85fZAzkFnYRt5o3YUIZkMQT2O7R2Kngtd6Eno6ve0NsH7sDfcx4BVl6PvxOK8qq2yAAihhOtYDaD8OskuskbCer10MbRER+tFaBJMj23YHDNKtDMxu4XXNaGLMamRKsv5oASU6IBcXmjzeJkCvNmSbccVC/JIOU9dQlYGiLQG+HbFUs4CS4XjYJfsPHTlcz+ZqL3fKJ7TetwNk610GcySCDsL2h/Z9cJMHiQknPbnNUvgSZmXKN/GtcGU0KgZlO+CYM8LZJ2m3+8efBJsKqv/envrci05d15Eqjs6wHhpu/oqpviPYsEMdMTxehm/wCXmSrOMGEM3dSgIL8C1Q9B0RRbLc4zVJzmwtN8AVeqVzBTrymdB5HJSq3ZPdFImZxx9l/rTApQJOyKhCuHk7JElLHojZ/VZPd79DW2mUMGs9atW9qVBU8qgaQE6W25oYBZkImRlcbOQI0M+R4QH00gosV0= 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)(366016)(23010399003)(52116014)(1800799024)(376014)(22082099003)(38350700014)(18002099003)(10067099003)(56012099006)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y0U4UlNldXdHS0J2UFJsV1FZSU56NlMyMHFKQXlRUUF1YmJnQVZ2azVCVmZp?= =?utf-8?B?K0pxVm9pNTE4bzk4cGk3WWRjam1NV0hDQVJmc1pzRFVFVlRDb2xuQnVrdytI?= =?utf-8?B?eXNORFdQUVBQTm55Wjl1V25PWGFZZ0EyQXZ6Z2lweStVajV5ZEZXYkYyVHY5?= =?utf-8?B?TWlGbEFhWENBMi9ZVnA2emFobXhTZ3hhNkRDQnVXSDBxc0NtbUpnT0tFeUxT?= =?utf-8?B?M0NBNTg4dzVkVUFraWJXSGRhTE82VkxDN3FudUgyUy9pTENyK2YzaUswUnla?= =?utf-8?B?WHNMZkYxYlpJSmdmUDJ4NGxMY0ZaVXBLRGlRbnprYnNkdXZqNjZNanprRy9I?= =?utf-8?B?TGhOelBzeW82TGRDV1N6cFNLK1ZJSlZEOW02UUc3akpCL1ZrL3Fmd29qTGht?= =?utf-8?B?aXltRldrZ2lCZUdvRVRaeE5RK0ZJTVJrLzd1MEdPQjZKTTdwTzByT0JTTkJH?= =?utf-8?B?c2N6azJNVkREcENZUDd6SW9ySHpXTElVWU1ER2ZtSzlDSDZlL3d1VEpnNnhw?= =?utf-8?B?dm41VE05Zy91ZFJHeWNyc2YyVW05MVpvaEZVM0FxUEl4bHhNRVd3MHFMMGxD?= =?utf-8?B?NmNQK2xmK2pxRnVHdm44c3JIS2ZhOGt3ZkF3R0cvMFhvZk42b1NJbE9CTDJ2?= =?utf-8?B?VEF1QWdjSUkva2RVb1BNbk9FMnFhaHRYY3NiY3pGemdnSyt5OS9KRk1NYlVT?= =?utf-8?B?bUZzS2hleFhPTVNmK0hMa3kvaWU2Unc2alp4VTRLNEMwKzZnUDRadkxlcjJu?= =?utf-8?B?WVdyNk92VUlzcGdhU1FTMkdvZGJJME5kU1RGUW80bytDWFUzeHZCWWJGYVlp?= =?utf-8?B?aE1JM1h2dUJJdU0yZXd2UGRaQXo1OE5kTktjWXdjUTVabm5yUFFFaTZJcmFZ?= =?utf-8?B?TTlySElGODZGWTlyeXZSZFF4OHdSVDBIN21XUlFkdCs1T2lDdlJFWXc0UHh3?= =?utf-8?B?MUJteitpRFVIdFloUERLZGxNc1Jobi9TNEVPYVp0TEo2TTQzZ2plU3Rlb2hE?= =?utf-8?B?d1NPd0QwZnBtd2lTZXN4dTAvME1GNU44UHVWRzZXemFydWVqeXFGak9wN1pV?= =?utf-8?B?ZlR5NlBHSndpSm5YcHN1ZEUwYWlSbnFFdWlDZEhabE81ZGhZQytSS3pESk14?= =?utf-8?B?QjgwQlNQdFgvZi9pOUJDelBEMS9KQllwQzBBRnFLVFZsZU9rQ0N5amxwWitl?= =?utf-8?B?c2FuR2VudzJHeDVBSFJRMHBSbHpqNnhvSFRtRVMwWUJ5dWUzNktkNzYwSXps?= =?utf-8?B?RitRR1c2K0oyMGNLWFJlN0lCalhicWhZQStvWjZHWEowbVYwSTVkSXZad0s4?= =?utf-8?B?dFlXUlIvNWtMMjV1djVJN1ZwNWpmZ0kzZCtyVjBqMS9NZUVpbHZ5TytyMzdp?= =?utf-8?B?NWxPOThRb1I3UW02UlpDQURZYmFkbUY1cmI0aFdSVWY4bks0VjNxZlowdlZn?= =?utf-8?B?VHRBWnN1SFc3MTFMVkc0NVdWRE5QT3luNk4wSGNqZVh3bTB4Y2h4VWdkL1Z1?= =?utf-8?B?SEsveEJJdWowTG9IZTJ6Qm0wZjlzRGUwNUlUNUxOdWxVbUhhdnFXcXdEODl0?= =?utf-8?B?VnJLalJBK1VSYW50ci9IZFU3MVRBSmZBTXhEd2haVVY1UEs4cW91dGNLRTVX?= =?utf-8?B?eUZXeEN0aUVlaWl4M3M3VjYzY0s3NHdnWExRQWoydFV6em4ycytCcXlPU2FJ?= =?utf-8?B?VHZwWWZ3ODdUcUVqNGZhNUNFbUtPSHdEYlhnNDB5Y1RhVWYxbDUzN3RuUkpP?= =?utf-8?B?YUFiTWdFUEI0MnFJN2ZINWg2Z2FrUy9VUWIwMkxzWHM3c3VRdUJlTzd6QXZi?= =?utf-8?B?Z1hGT1RjV1l5ZHN0VTJmVVRnNE5EMEpXQ1pTNlcvMXFwemkreldSU2JSSGNC?= =?utf-8?B?U21QNUxLbnZNSGY5enJUUUhueG1UL04xa2xvV2pUS3N2aThLd29VSFFndVVj?= =?utf-8?B?OFE3blE3QnFyTVdyQUxlWU04ZGhaeFBhSHVtVkMwMUE2dThaNGFjTkIyVUdJ?= =?utf-8?B?RkJFMzlUYW5JMmpaUVA4UFRMWTJrUnpnZXlxcDJUNmFHWUJIVUNhVXZ6cXZj?= =?utf-8?B?eDlPUWs5UlJWTGM3ck56KzR4WG5vWCsyVVU5bDJkRGdqUUJYUExrQXFVWnA0?= =?utf-8?B?WklmZ3NCcVdSc0paa3R6Y0dFeFJXMzIzWVRxVGJiT0xZV0x3Witlem1WNHRu?= =?utf-8?B?MnF4dThLaUpqSFlsQTdxbEJpTWswek5qbERPVytYYXh1dFk4SktOM2VKWFRB?= =?utf-8?B?NjdyWCtrS1ZsZExLczdSY0I3U29OZCtFS3V0NGRhT3dHYTN6YytZcGFBSy9G?= =?utf-8?B?TUNKM1h6aUx2S1NMK1RySVZDVDZYbHNydktWTlNmbXRCbW05NkdVL1YvTTlQ?= =?utf-8?Q?iVe/KKk4/0CEXd0Y=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0e01c376-5c63-4717-c91d-08df239567ed X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2026 10:34:31.1516 (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: 7z/WajXeptpsZrRbNwL4Lo96/RK80J6CkUTJfYmMMvQuL4phe9zp3cuzGD8PRBCugC6GKJ2pcvbZWwE+JkjBCmMduS6IVtLuVChRwJDnKes= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5515 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