From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11020110.outbound.protection.outlook.com [52.101.69.110]) by lore.virtuozzo.com (Postfix) with ESMTPS id 3B7BE807C6 for ; Tue, 6 Oct 2026 15:35:58 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xq3rbzpxhX7K4hgpDCpqHw4Mx3Qf3GV453x8ug2py14JPe7mF9kgTCseaJfWc3Fo/xlqb8q6f7Ne4JCQ4TxA9WRrelc+0VTr0Zr4f6QWrO7LMMorEhg+6eptKkPw+lcjTkqomXKDac9/2WgQvPGMihXvupszeJuyucMgC6AaVxRIeaN3jqn7HnsgCmccVwfjEW8I4xLaNXScezxxss8EMAqD6WlPpF2zoQF844XiCnOO3pReO2PbsMXA/P39cRc35CW+TWQCk0THaBPHeWGwM9pENzWQw6vbNQzIHGyFP1KYZOY7LrH8wlag1dHshk1TFNM0HSz4AZPEmZY3ymzkMA== 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=JyH0IaUJ+nYygRRCxzR/9taErmq1KQPDIj/67OFBgsUn6M67kfUEyEZ5WYM/V5T3AbIKadHNRQ0AGu9hNov28NftV6JdbnrjFa5uiW8NgE/UQMVHAjPImJvfR/1X6uwWf7IOW/0Z0MsPbAHWoZnZF3Duof3JkegALgo3unwaDHHJbfvi8lLBJgter9VfSw+NpETR2FKBKxQREqrYUqFt6qfI/4HOH4ZsH/ao4o32B2oy+ijDGABW2+l9CgKFAFfHpPuL+RfF0aWv7eLwFX2NZD45xfoTDB7mdf8ospv+/fhecw6Qtgz7UR+IY9jLvFlYqF7BB+/fWqjIU/LX7OUdfQ== 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=ODUdHsq2a8k/aY2apTyI/MyfZ1xM541xNK9wn3h+YGWHKbfQbcJqVJ1yQCi6f9nVD69IP18sNmNdhifhI4C9WrLQL9mY9S9JEps2/DiIySvHccXhyjkaLR+Z193zmhQxdpu98pYHFMZa50RggNbc+0s10e+Az6xjBSCENfGmHrU6K/9VywhfdDuSB9mGO6cdDjtrFlSjs1VgNnaacIBfz1cPbJOv+I0SpKztnnpt2nkVaePPW0mpOdhXDHD8epk6ngDZ4qrlCHtaEuNOO1kCEe3CxgfiAocDqv/tHl2i+D0nKF+firl/XYcJq5VIaOL7nkabZ6Xxle7ao3ueaoUjyA== 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 DU0PR08MB9774.eurprd08.prod.outlook.com (2603:10a6:10:445::18) 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 15:35:56 +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 15:35:56 +0000 From: Andrey Drobyshev Date: Tue, 06 Oct 2026 18:35:52 +0300 Subject: [PATCH QEMU HCI-8.0 v7 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-v7-1-044f668789a1@virtuozzo.com> References: <20261006-usb-host_v3-v7-0-044f668789a1@virtuozzo.com> In-Reply-To: <20261006-usb-host_v3-v7-0-044f668789a1@virtuozzo.com> To: svt-core@virtuozzo.com Cc: den@openvz.org, andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI5PEPF00000985.AUTP296.PROD.OUTLOOK.COM (2603:10a6:808:1::81a) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DU0PR08MB9774:EE_ X-MS-Office365-Filtering-Correlation-Id: fda9d320-1649-4721-c0cd-08df23bf8375 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|23010399003|1800799024|366016|376014|52116014|5113699003|56012099006|10067099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: NxDsVUqB8ZhQIPI2N7BEjv70axbWz76/x60CJAap/AzQX2JgFzhNciHwazV1GIBKAsZ5XT0YEQA7N7uORlvEZdSZBJ14KopPwUCefcgzbKxw10pof1c6fT1qgSfUUR9pOjngwI4Ge7J+fafckabPyF/35ztDa6VxsxaXbaXqlpqDgCOUnlp9aPu6VJe5TWKksUB8+2f6tO+N2cmq9gx9q8gZjv51Ip0FnB9TMCVlnfqebcrXMeP/AHDeuGGIKvCi3SPxtxml0+h0aeYkjuPb5/GuKUKvdmJsvoBPEpc03IsKW43pJomorAvTnARyx+KqURuUU3sSi8MZKHt60MeIllw9rozHvwByJyf0sb7E2gIU78fYK4pLFSBJpljPv9zCeZ4LwqUNNKKshnMGuNqy/rAqof+cS+fTSqbXlMF77CvAoyJx9P+AcPvF+r7p3Lm9sXjM4o2+zR44sYhGN49qwxc+UV5TB1Zdfe+vUk8pAPpiYVHJykJp3JYZ9KuPHWD7fVdhLL814yxeTOTg7vDTPGyX89QSColBbi/354cuwczUqy8YAEVDFLKvY58gBK7tL2yEQabFWyfmQS22kW7z1d/33hAszTKz5T3DssGYIPUYZzwgy+PoYaWqGg07ZpK3yOKH9sDGlReuegVyzs9pNfPWTG5d6i2wozW4RVqt2DJ9WrziNKepruRKVeJm+6PM/QZdCfyP7xJDIRcgCQuDP9RIz/4/MGX57iQ7KpcCPQw= 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)(366016)(376014)(52116014)(5113699003)(56012099006)(10067099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZGozWVFPeGdiUDdOVmZwQy9KMGk2UkMrNHpDMEllajhFUjFDYmhWeHlVOGtE?= =?utf-8?B?WCtRS3pyeUFQUk1vRWQxQmczTFBQZFBRd2llQVE5ZkM2K21yRWhRb3lCb1pu?= =?utf-8?B?ZVFMTnlDamhFbm9oOWRZQVJPYWhvYTRXM2t3NkhodjhFUjdaZFFKSVpRaGxn?= =?utf-8?B?MHVhNWVqSHdCTWxtb2tUVEZkV1NGd3RlNy9KRlA1dDQwRDF2NXAyMnlGWWZn?= =?utf-8?B?eUlZaXI5WHJUeno0Wk5yR3YzbVRMWE01YVZXejRxdkZsdFltNGt4Y2FmWGYx?= =?utf-8?B?ZVVjb0QzYlJiZld1eSt6WnZVM2ZndC91M1ZsMHEzS2Nwb1MyNEhod2xKY002?= =?utf-8?B?TzBZbXBQNC9Pc2FXQkErWVhDOHJLZFl5VU5waTNLWjJ3Qi9wNGNkSHJRbll2?= =?utf-8?B?SUZPMTQwYnBxWkQrU1FkL2tpbHdZb2R5TlZlQnJPeS9NeTNmWjNxOFRDNVFC?= =?utf-8?B?SmdxYzk0NHVWOU9LcmVUVXdVZjc5ZGM5OFRlQ2owUHdFQUNBdk43TW4yUGZ5?= =?utf-8?B?dTBKdnhWak9OVmNrcitGQXFmeEpRZ2thekxrNE5qdEtNRnllNSt5LzhOOVV5?= =?utf-8?B?RWlwakpSaEh0RE1GZVFuUGNKYWNVNUVxZFhValV1V0RYYS9JZzFySmVpSUM3?= =?utf-8?B?SU5yWXp2RmFHUU9ISjhIZ2ROUkYyTDBCaWlROHhJQm1lZjgzR3NZSE5GTWlH?= =?utf-8?B?N1pkVHRYNVJMY0dlOVQ0bFRQS2tRdGtUWDlxK3hEelJmc3dVS0N0UzloVlQy?= =?utf-8?B?ZHdkamhwajh5Q3BZNXNWYy9lSnMzSThPUWZZRzlSSU90YkEzcHEyTmFwZk8y?= =?utf-8?B?OHhodGYrZHFGTkN3c0w4Smo1YkFrbFZFZXBRNjNBMG9zOVo1NVF1UCtuTlBk?= =?utf-8?B?cFpFOE1xRm1ERHkxeStZU202aUhPOUFpYmR2K3dQcVJyWXoxRDhOUXFuMUVR?= =?utf-8?B?S3FGa2ZlTGNTT3F5WkxLcEJQdG80YnZzYWZhQmlkaDIxNHJmNzVSWFZqNkE1?= =?utf-8?B?bHpCbGdmWXVxUHZRV1N5ays0V05NNm9pWkg3eHByMlgveXNLWDExMEJ5S0lw?= =?utf-8?B?Tk5qOGFZZ05nTTlzNHl1VkdIenJOOEMwY1pJYkxiY1l1K2dPOUNRci9ZbzBZ?= =?utf-8?B?bFBSWWFMRFdVaTk5TEVscWZwSzhrdlI0Q2ZlVVhNcTJJT1QvRXBxYUV0UjhX?= =?utf-8?B?V25Hd3JZR0NVTjliSGNadzg2WEU5R1hCMkNYMFhRSDEzVUdnS09leTQzUnU3?= =?utf-8?B?Q0pXQ1MvN2UyYUhsTGF6NjNWZUNQZkZzaW5KdDRuQ3BaazkrV2RiR2d3VjI4?= =?utf-8?B?OU9OZjQ4SGFITUU4a2NDaitmdzJDSmFSQnA2aHplaC95MHV5WFRkRG43cDA0?= =?utf-8?B?V0VZTGRlVk1VdmI3WnAvdXppaCtPSWRsTTBQaXZQRlExSzBHT2lVamE3YWx2?= =?utf-8?B?TDFGdHdzV05IdDJJb0FpMUYyVEg0NFNpYzM4ZUtOVUlUdGtpRG9TMUlmYUJt?= =?utf-8?B?VTlHcVcwMmNXVS9yOWF3Z3gwTEdkUnZQaGpRbW5LY1E3Q0oxZWF4aFVyMnQr?= =?utf-8?B?NWxHZkY1NjAxNWNnZDYzbG4ySzFiSERvdDMzekVaQUJrbGlDWEtvcUlrcU5k?= =?utf-8?B?OVZTT1dhTEFRNng5OFhtbTJjTjZIcWNVbFUvZzk4bnRuQXZ4bHJsWEZpZWZk?= =?utf-8?B?Zlh6VUdtZmtiaXpKY0M5VjU3cXNtMTBvcHg2RlYwRU84MTFFblVTQnRTNjhK?= =?utf-8?B?dVZwK3JJSlFyMEFIZjdRT1lkVkZUUjVtS1ZTNGVQK05pMC9LYW1welhwN3Nq?= =?utf-8?B?cmF2U1UxMnpXeElrUGVpbHZ4WVc3ZTlJemdab2dIVjN4N2kyMEFubmVoVUNB?= =?utf-8?B?ZWRYbTBPVlpGSWdocDQ4eklvRTFJdFhmaTY4U1FpZWJoaEdqa2JabGNQN3k4?= =?utf-8?B?bUhFUUFLTGg0dGpmYTl3b1VlYjAydXRTZlhiNGp5VGtjcXpiSCtDTXI0WHpI?= =?utf-8?B?RERUWXdUTC9mQVN6VUVzbnRIVklRKzlITDhhaHJUOVY1UlR2SDh5emtDUjR5?= =?utf-8?B?dXRnTXZuRWR1WllCSEwyOXowVHBaNG5IUWI1aWRXWTZ5LytDNmtISzZnOS9I?= =?utf-8?B?M2dscUp2YThHYUJNWHI4cWNKMlNUYU9zVGE2QVhVWnYyOTIxVzU4TjVmSE1C?= =?utf-8?B?L1A1eDJqdjRDSUFaR1hsdmRlL05JVHR3bDJHblBEaUExOHN6cUxIbUxZK2Zh?= =?utf-8?B?TWd1VEVrdTIvSDJ6NlJQY0piOVd0WlNXZ2pwRjZWNm9aWmw5TGdadEViT0h0?= =?utf-8?B?U2k3U294L2V5NDFZcFVLK3p2dGd6UkI4QmRTMUFVTDN4Z2FTa0V1c2I3WUM3?= =?utf-8?Q?XdssMM9Wk90JMnmQ=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: fda9d320-1649-4721-c0cd-08df23bf8375 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2026 15:35:56.2581 (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: 4JVPv1/LTvoA7RcN03UZ+x/XemDVPF40jXAkMRHoZXmx0vqjzB4EF9gRGkfmjQ0oi4DJjWZxC6E0e2MBW/QYYQ7wwOmOnzOkeuMOYDaL1dQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9774 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