From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022099.outbound.protection.outlook.com [52.101.66.99]) by lore.virtuozzo.com (Postfix) with ESMTPS id 8517F80680 for ; Fri, 25 Sep 2026 14:11:29 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XKL/rwkKCB6jrMcVTLql6qYl/7jwQFmUl8HVNmumeJyWvAcIgvdHlHyFc0H+sA12W2gIZtmxXwFUqhmslrida5aUsdoEPIUEv0ieGHVJtz6AprDeIGZ+zj93Qp+3CISPN3JZ6XH0dthE4JMa+8oQy9+04GQRVknbon4apwjpXhmyXcVAUMMvlNaGgxr1KsRjMftI/P/q+KLqUA0A5KDsmPH/QSTXAQEGxdF4pmFj38WrQBEamn/fNBH+mR4Q69KtqeqD6R3UPQstm/FQxthf1fwBwvH7cU7Zg3NLf3wGpA+hGXoWdpbECpjVxfKTh2Th83fLD7knAI53a/VJYYrD/g== 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=PF1t1AM3leGG6f45Arp03uLuF6hbPd9kNPRc9rJDUDkNSiygngfjrJMO2kVExVuZGC1m0PW7F8XCDalPl220yrYEg+4P8BFBPn5Rcur3d27mc8BXoxlMuHvtwCOOqkjUCE5xapvvGl05QkPan3CvedIZbe4iE43K3EzxhVqfvT2F0mFNmcNUJff78EYbT+Sep2IYpgIBitg/hG5of6h9RuG4AfeLpHmZpnNqPFB6VEX1UqX/tR2H4hxB9rFyp/S7dQqV49fWv1PewdtI6cT7aUYHRLgMMkjhG4Atr/g2at+MTd4GSaE/aqq3uuYrX02KQgZLMFGE4z3GBQ+hiOUbug== 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=l62OOX8LbciWn3vC4HdOqKVBpuJemAKoNKhGfwyVxODzTmRBDyBFw9c5n7V3GTPO9dGFaZfYV5StuPekjLLPQ3sP8gSftBRFUgr++WfUQf7UKnfH3H/KdYw8z7empg5N9C3qx+yD4V+3XZlKm6jfaZzhrsp8Gkul2uBH7ib7WaCVZgXkvTGcpNpEqDourISbiCI3vVl9Wj3e41dqzt9nqGOXTZtU0C1LesznaUpLqCDr/v6TbMR9hXcsIGmwX9+0a6EPKwr1+sioRiXtutB+vqTn47oOfyWs1Y4iGl5sf27/RMzUqG2Hcl5TlgHN3dAEqGAVuXGQq/lHQa3MMiB/rA== 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 AMDPR08MB11336.eurprd08.prod.outlook.com (2603:10a6:20b:716::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.18; Fri, 25 Sep 2026 14:11:27 +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.0451.014; Fri, 25 Sep 2026 14:11:27 +0000 From: Andrey Drobyshev Date: Fri, 25 Sep 2026 17:11:10 +0300 Subject: [PATCH QEMU HCI-8.0 v5 01/13] 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: <20260925-usb-host_v3-v5-1-e5b21724db4d@virtuozzo.com> References: <20260925-usb-host_v3-v5-0-e5b21724db4d@virtuozzo.com> In-Reply-To: <20260925-usb-host_v3-v5-0-e5b21724db4d@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR06CA0178.eurprd06.prod.outlook.com (2603:10a6:803:c8::35) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AMDPR08MB11336:EE_ X-MS-Office365-Filtering-Correlation-Id: 785830b2-ab5a-4454-95e3-08df1b0ee38b 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|376014|23010399003|52116014|366016|1800799024|10067099003|56012099006|5113699003|18002099003|22082099003|38350700014; X-Microsoft-Antispam-Message-Info: TUK6bvyOqu7NLdCGY1rLb0JEG2yFYdHy1aBQlFi9cnaQI78eJ7WI1aJTEpLWXgBgWYiqBx5NCsUdhR0Bkj7u52425L/3XwiaXrf6zZhn2dH8D62qDAM0Yhl/p9Utv6iLehriMURLQwXoEJ7HwcwyS8ia5VSnRxR041xJILqrgOEIDYILSp7lYbolZ1ubsc8uS0Qu3pL47NqBmN3pd1BhkHO372JYdO+/J79poV5ufSIsjj+PYlfKt0MjIhXY37jMAE66dhIAid1mWCF8aQioapW/tH7q5YrvmJO1ov1VuP3uWhioPGmrQLfBjhyk2k5OR0hL93JOHc4wxM7VPc+tm6IWjNaIkGDLlZqdtDXu22KOt9E6pdRLuP7yErf18W6EwvrPYgDrk1SihocAscy0dcPv1NY5CL9BWpMkwso102XlI7zgfOSzetOljpynv2TFE8IievUJFjD39yMjDFtKzkuQZHuBTTijgTDT7N3rFh+zLeLPxyoIW5cNG0u8WEqAp92l62tf3Nfkov73e6osA4vyDg2u+pBZECaQDFq6/oorxuDPdUlsnxk5JQ/BjMlnbBEWMqFMcmWgfVAbbY3aG4NWMFop4MqV8h6/YAMPNub9qJQcByXpgqPjHsk0hevSxnwN8xIbQsgIBQv+d16R3KRsOvykG04mOA5YiOoPEpmUBCGx8C+Dt5Y4UhHK3f+ptXtf2G4BkFWbmgND4OU4aNi5bSrSqhzcPciwkwENFiQ= 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)(376014)(23010399003)(52116014)(366016)(1800799024)(10067099003)(56012099006)(5113699003)(18002099003)(22082099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MkdpdTIraUZIK0Vlazg1dmRycTJQUGYwU250SFI3MXlmN0hoUTdSUjRpMzdN?= =?utf-8?B?b3p0bTNkbTlTYWpiUXpkWFNZR1J3R2tZcXViaVdkS0VCL0NlS0ZDV3UwR3NP?= =?utf-8?B?bm9nd3hDN3lldWJEZmxYVm5GMVl1YllWSzgzT2xCeDFtNnFieFVxVVZ3d0M0?= =?utf-8?B?Y1p5akFvT2ZhMkZ1NE9HblVrS3Jqb01wNVUwcDZtNkhCSHY1NXhDdHpzS0Rl?= =?utf-8?B?Z01JYWxPekFCdzU1RDZvbmVPV0RZd0xobUhxZnpLWTVMZFVHZDk0ckU2S0Vi?= =?utf-8?B?N0Q1UHFVT0FrL0Z2ak13WkIwcktvcTlRd1VRa2NPdVFWeFl1cGdhQzFDSG8y?= =?utf-8?B?YnFYZWlHZkp3N1YrQWxvNjhqYWtnNVY1S2NndWI4ZktCZ25tTllnM3JFT3p4?= =?utf-8?B?ejdLZ3A2dmN0Um5QM0NGWWlzTGlkMXZybDVLY1lHOFBLMGVpWExxckRXOXRK?= =?utf-8?B?QmZPRnliQXRKK1RGc3JkZFBiWDRob3lTbEs2bHA0bjBnaFFRUjRtRWFIUzZp?= =?utf-8?B?Q3JZV2dRQkdObURwb3BGd1cwVUxHbnpYalJzTEJnZ1JDQmhvNFo2RFdRZ1Bz?= =?utf-8?B?cnhVNFRBSUh0REg2SWhiRnM4cUtycCtReWdzVitXTVRPWXFzWldjZGV2QnRn?= =?utf-8?B?bXhrT3l3U3hwdDNqNU96dWZSODMxcU9yUEtSQTlqbnRUbVlkaU15UERWWW5i?= =?utf-8?B?bTJxU0tCMFNrbnU3aUN2dS85a3JqUUMzT3p2VlUrVjhxTnRpNmdzaWpUYTk2?= =?utf-8?B?UmlRMnRBM1pmY0crVlA5VUk0eUdHYSs4dnhuK3Q0d2JwNlhNcExHK2xOaXNs?= =?utf-8?B?WTBoM2taMzR6UFFRWnNQZVRseGMvUHN2ZHgrMU5ITEE0bnl0SE1TcU1PcWhN?= =?utf-8?B?aGlkazVPRWNWSEhtVTJDODVUS1ZhOEp5bllvSS9QSDY1bjNYRDMvM3RySWZM?= =?utf-8?B?ODFSR1N4T2NIaUZraXAyQjZ3WEtmREs1ZzB4NTlBK1pQc0RleEo2SFdqVUk2?= =?utf-8?B?eitGbHBMbit2YmNxclFsOWZmOTk1RVk4aWlsYUtOVjdVb1R1ZEJWRkMzTVN0?= =?utf-8?B?bHdnUEtjRWtXczZTSFRienpTemRLQ1lKQTBQM2Y5SGNRYXNDS3JZYnNONTh1?= =?utf-8?B?WGtNdzBCdjZFdVlKS09LWTE3YlFVd3dGbnJEdVcwS213d2FpalB4SDFSYlND?= =?utf-8?B?UXNkWE1JeDYvK3RtaXhSZEdMRUR2WFNOYk4zZ1hJdHNsRGlvZDBuMWd6Smds?= =?utf-8?B?QVBENy9SczkwVWowZ1dITnBjRmNjSXdTSmc4d1YzelozMGJtR3FVbkJmT2tW?= =?utf-8?B?VExEdHpBbzl5M2pZbkU4amduWTg0RGpSZHdPdnJ1dEdpNXREdlpQMkhIaloz?= =?utf-8?B?V2k1NWZ2ckloQXNwV2FsdlJRWStDVm9vRzM4a2ltejVuOFh5Ymd1SGdaUUM0?= =?utf-8?B?TXFIQkFjMWVvVkxtTVhRVVRYbEtQdDBoVnFvWWcxdGp3SHBoZ3V3WHhhclM1?= =?utf-8?B?TEtXVDEwR2tXNUVmSkRzeVRhM2tWUEZYVGlQemJ6V2dIampNLzRGOG5OWlBi?= =?utf-8?B?S0tEcXhjNkN0a1FsQWpRSHZWdWMwSnNLRUJ1N2sxUEtJTUJPbWV5VzhIUDBl?= =?utf-8?B?YmhCY1N6cDgwU0FqdDVmMVFESzJESyt1NU5GWnlsUVlVbjU0dVoxQ3FXZXNn?= =?utf-8?B?TWRKaDJzZnFIRDVwaUpyay9wU0VYeDA4TDlkWlM2dWV0anh2Wm5KOU1VOUxW?= =?utf-8?B?VndlQlFrenVhT1Z0Q1B6dHN3NG9tcWlmVERQcmQ4cExnQ1pkdlhhc1NCUmNx?= =?utf-8?B?eGpjb0RnR09UZHo5RGhlbW5KVlJTNTRoVkFDSkJxWFFIUmxmMWxoeVNFbS85?= =?utf-8?B?L3UyY3pVRzBNQ0JNcjhZVjhKMURlMXdQa1lpdVVmb0dOam1OdS8yM25MY2JT?= =?utf-8?B?RWVVcEF2M2ZGL0VJVGVEdVl1aDlKVUlpUFhsOWNSQXg5Y0o3Q2lNR0ZKSTJR?= =?utf-8?B?UGRLbWJRd0tkRXhoejRQZVg4QW0ycThpNWQwVUtCVDZlNGN2LzB1TzhsZEFm?= =?utf-8?B?ZE1DUUJUZys2WWZVamt6SG81WkNuWERwYWYvTXpYODN5cWJZblNmcE85VVlz?= =?utf-8?B?UldVUmNtS0JmQ2l3SVA5MDlGRldWQUVONXU4ZnFzQ3V2VWJYOUxPNnBFWU1G?= =?utf-8?B?aU5iOXl0MEJCdE9CNGxZc2x0M3pqR1ltUEVTRVlRTkprVHZuZDRDcnJMNWd2?= =?utf-8?B?Tmw2L3lMaVBrUHlBQy9ySU1ySi8ydGhWQVBST29qR2tXcFZQdTFFYnorRFg2?= =?utf-8?B?WDJpbXBIcWcvK09ycWs5Y1BIaEhOTDFSYnZaWUhrVHhIOEo3S0FDVXdicXRK?= =?utf-8?Q?kzPmJMoOHA7621V0=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 785830b2-ab5a-4454-95e3-08df1b0ee38b X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Sep 2026 14:11:27.2273 (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: JqrEn/9yFJZJgVmC4xeBMkGCsB8MMxqaVvaFfMHx8cJPkyhqubrTeO7XubxBM4Ebq3Iohs+LGNNnKUwC0AtRZNA6LHgH3l+3nIw7Ari/V6Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMDPR08MB11336 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