From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023104.outbound.protection.outlook.com [52.101.72.104]) by lore.virtuozzo.com (Postfix) with ESMTPS id 080A48065D for ; Thu, 24 Sep 2026 16:41:37 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vbjk/wrodhpeZYbNZP2gpbSYXbuM7CupYULCq4xWRfZoKOk9zVYs+dbWYRn91ZIfQ5xOazeGOMU6DVJ9TOt13H9/ypgTxZywtjS83Xi2NFF8MmD9QIMoM9xjxB0tZpnyTcScHrR0VoJwTuNR5OZW0Q2hk7gCgDbWkdW32b9lD2lQ51zuxYV5RrslocUUY0toeJrWNmhplKpHP0BMGz4w8ydNS07qDt3dfyac2F0RdAywVpqb/Ql0i8ZnPRRnQdtrsQ0oBrnpJzxPbb+GBlHvwVIhYJdm0fC4DdpnnpteT5AwODN5ghUWPfQVstnJLdjbvufTXHB1lC45yklEg6qlyg== 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=UNI+PP4AvuTy6+k9FvWHyxoyNKxN5R/NNlKohomHbjxxB/TVtXn6usPSd2CMmtvPVSMcyCSgh508bQBZFT0TLKiz8RWf3nB60K+u0TqrV/lJmr5caTdBV9no37NqBljFFkPIUOTOAFuVydSxP3wgw/amSv2NzhHEZkSxFK0V+VjMtaXBkQT/jJ5aLNzzywVoKBnRL0TCKWQKfxU8mthHvrwbjL6X7HT6ZtR1rw7ILiEZcE6x993DjM+WtunqupgAIScgHW8rj4GYq7BuNs+iwThPLbCH0d8ggqMz1LmjayB7isGQmc3/KzD5nk9XK1LqFIrtkxCJ0zwNjGcpwouANw== 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=uDBgcFjx78QDeizmjas/RdieUVPgmxxWc5LPrPjsGI37uTmmdN5PxbHS/hyt8vxfA2GvZ78xVG89Sd6T6ZdFEXHx1Bxlfksuyt5dQRoPCFsJ/pRXFSKBiUxsCp+2MXYEVdt/x5KG+qL81AMdpV3yxGRYBsJOOKwa2lT9Zo7vp3h2jgSqb2SFBZwuTu8HVr/QPf6xiglI5+GfjrhTrszpdKgNFyOL1B3/rbg4K1OLVZ/WE2w/sWUgtPF0BLy4hVQeTKIiz+PgMxsCCu8tmxC1lGwSy2krGScrJTHF+SuwUe7ps9uymUfJ8bN7cSVQyRPBa6CMEJ3cGmqyk3i8ApXmXA== 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 BR0PR08MB151385.eurprd08.prod.outlook.com (2603:10a6:2c8:30::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.18; Thu, 24 Sep 2026 16:41:35 +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; Thu, 24 Sep 2026 16:41:35 +0000 From: Andrey Drobyshev Date: Thu, 24 Sep 2026 19:41:24 +0300 Subject: [PATCH QEMU HCI-8.0 v4 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: <20260924-usb-host_v3-v4-1-1cc48bf630e7@virtuozzo.com> References: <20260924-usb-host_v3-v4-0-1cc48bf630e7@virtuozzo.com> In-Reply-To: <20260924-usb-host_v3-v4-0-1cc48bf630e7@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev , den@openvz.org X-Mailer: b4 0.16.0 X-ClientProxiedBy: VIVP296CA0030.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:356::12) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|BR0PR08MB151385:EE_ X-MS-Office365-Filtering-Correlation-Id: e3f2d1cc-89c3-45a3-af95-08df1a5ab23b 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|52116014|376014|1800799024|366016|10067099003|5113699003|18002099003|22082099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: sTu0zEDYAAKoX28s+C+xYmPKo+y+Q46jZleD/P7KsbwO69e7xCzZH3FMfKGdF+31sIK1RcIkRVmIoSbIC7qkJUEnsh9FmdNlpF9VVOBIu/ADQd8Jb2ae3GMsSCK/ldl045jdgEiw7XS7/+SETwP5ir8BIIemasFGtFit7z7WaN4nZMTffST61Ub0wZbjAV3UekYJ2g/dr/7aPOaeBFsj49tLpLtCU0iSuqx2iCgDrJkgt2YIQdihn7Bo9DwVFJgd4DOoC+eLSV3AbvoesYfWhWbr+x5PBXu14C7vN0rsK+ubFaU0c8kYnOO4ey1x0MiuHiGoc6wjPiG2JwPtr4POMHOPPItuzoSpLB61A4NpikLkA1lCF2cOxujiU2xfS4RRgq9ogZj0Z/iMkOHn2ElEV/Rh1X9vQ+j5CoL1dfpT21mC+y6VEPu0k7savOJzQYejmg9r36s/dPBIDqurUxba3m5Wu14/ecM5tpI/qy/VLWZk27+PGFmD49qC7fmhinySwZ/OhEyt4OODobXmw4kE1DvdTPeSOkT6pD/4e4dp+GubLB0gItYHq/TaZ5JIr+QkusN2QX5bCwwuNahJmd2Pq5Is4KUQzrrQk429cfc41fW7K+Jg2vxq6Il+uYOSc+OXizcb2H6P3JtTZFYMWL5+o4LDaDNGSxomporwkVhSY9kurItkrXVhKbBfGWRv0UE4zUXQyIKlybfybOay9seMn9uIUAhUpzzKN+A6biDJBD4= 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)(52116014)(376014)(1800799024)(366016)(10067099003)(5113699003)(18002099003)(22082099003)(56012099006)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UzhZM09jaEp4WGRmSG80YVpCa24yalFIZHYyMUZRWnJFVENmcGxTT0FvM3BQ?= =?utf-8?B?dnFobWpoVUR5WnhoVFJFVUYwZWd2Q3lOMEozWXg4bFJ1MHdBMUFnemdxRFlh?= =?utf-8?B?b0p0V29McjVHZEx3Rmg5TEZid1BGVUVDVUVXcnFKMmViV1hFN3ZNYVlTMnN1?= =?utf-8?B?citSM2xicFluUnF2ZHVzNGY3YStucm16QTNWcE43SlRubkpOSUIxTTFMTXNZ?= =?utf-8?B?Z25BdXlYTzkreTE3anBkYjNXcHhTdG9xaEVpS2JHc0FQbVY1Nk0xdHNnUjZz?= =?utf-8?B?RFY4QzZZZjI4Wm52M05CNE04dFZUWlF5Tng5SHVrZ1p3NC8weHptWE14ZkJ1?= =?utf-8?B?ejczZWZRMVBXYTJxYWxaU3dndFJOT1FSejRqQVlyZ0FQclB3dWxrNDJtMlh0?= =?utf-8?B?MDczbjF4cm1MMVBZdmxDQVpwOW9SUjhLNVFLTkFIcHR6YXFZZ2NoNGMyT3ZZ?= =?utf-8?B?WkYvUi9qY2xiNjU0anJtQW5HUC9xdDI2ampIOExFK3Y4bkdrdG12T1loOVdD?= =?utf-8?B?aEVna0hiM3BGanFFOE9JL0s1Z1d2MmdqYjlscWw0ckxjNXpYeHQzUnVWY3Js?= =?utf-8?B?VzYxck4ramN6UVZmUmZhZHQzR0xDdVVYREJJdmpNWUZnd0NreThlbW9FMUNN?= =?utf-8?B?TnpkdDR4eEI2dzZwVWp5cDRnOGMyL0h5QkVmQVA3eTN0MUVsT2dRczVsdHpH?= =?utf-8?B?T0FWT0tJb2todnhaVXBBeWFYM2FLbEhoZXVrdStidlErd3VvZGFCNjhWQUht?= =?utf-8?B?ci94bXNtUkpJS2loZDczMUxYcXBDUVhGQnI4cy8zaEhvb0RXMlRKeUFRa2d6?= =?utf-8?B?VWdjNXh6SHlXRzZPRXlqNkRNSXZCZ3NYa2RpQi9nYUI1Y3pzckk2VGxQYkYv?= =?utf-8?B?TUo5cllKYjYwOFRLanNodDhlWFN1N0xZSUVtV245ZVhoQ3F1R0NpUkV6V01i?= =?utf-8?B?cnY3S3h3K0MwcXpSTjRHRys2V3AyMGZlOGdOY0loTnNpTGQwemhlY2tPUjh0?= =?utf-8?B?dVFBZmFQRTcycmpNVFJMbStteHdQTUxaZHFSRi9QUmNBZkF3Q1Y3SzhjcHA4?= =?utf-8?B?NzZKZ1ZrT3UwMjJ4U0hDbDdhZnF3L25kTU9HcWIza055OVRSRk9JeU5iY2V6?= =?utf-8?B?Ynk1RzVSNjlZZjdiWE5GQVNvaWVnOGR0QlZWaWJpZ3RtOGZ2SWh2YUROaGlK?= =?utf-8?B?aGJzZXlabFJHTGx4ZjN1LzFMaGlFOFVvZEdpd2tTWlRhb0NRM0pCbEhiRmhE?= =?utf-8?B?NGdwcGQ0dWFRcnV3dE8xaXp1MEk2cUdHbU1SQm5TeVRmMEV6ek56TDRDMENR?= =?utf-8?B?WU5xdzZhNVhzdlRMeEdhajZWN0pNNzZaaHpySTIxN1NqK3JXaE9SRW1BL000?= =?utf-8?B?cDVzcnNDemFtRnpkNGRGT2NCdTRyQ21qdnpTcU5RWHh2dkJkT1gwYlY1N1A2?= =?utf-8?B?ekdRaXVmeGFDNVpuMkhHYzh5YlpqMUlIMmdmQ3ZYcm1FTWc0QjFaaW1xNDlV?= =?utf-8?B?UzZvQmViRlN1K2RSSWJBQlFsWDZaSjZlZHJsa0YvTlhuZ0dDUXhXRERtUERG?= =?utf-8?B?N2xVWkdtNHQ0bXl5VllLdzJxWWpkNkpFSzk2ejVrdXdYaExUMXN2cnpSOTg5?= =?utf-8?B?QVBMNHpBelZPY3VlbUpCN3Z3U1VKQ1d3STQvTTBtcU1kMjhCNW9HYzk4RCsx?= =?utf-8?B?cDhjaHV6dEFzSkY0TXhkTTk5TFdzYlNmdnp5eWtUQkJGYWxUTCtuQmZrMWVh?= =?utf-8?B?N0ZKN0xteHNhcUNzK3lKMW9IQXh0eFFIRlp6Sm9BbzJYd2I4cDN1TTJOSHpk?= =?utf-8?B?SGI1U0FnSUREVDFjZDRBTGdGd2FSSGRVeklITjgrWEdjTTA1cHJtOCtDNXBZ?= =?utf-8?B?Um9PNXR5N1M4YlhrTExaUDExbTQrWGNTSEpRNE5OK2g2VmxjTmo3bThIUmQv?= =?utf-8?B?VmpHZlUyMmdXZzhXcHJ5MlVTUENsOS9xMEVJTC93NGtMQmlJaFNhS0llb3RQ?= =?utf-8?B?UGxibThJYTFBcGNvS01JTzhVT1E0dlpaQm1hUUthOFREd1dDZkNLeGxtTE1k?= =?utf-8?B?NytiZFN6d0RuRnJSNjNjWG1YRDE3YmFTdG9zeUl1VGJZZjhXaXNTNXd3TE9W?= =?utf-8?B?Q1oyaHlzdDloL2lpQmJxNzFrNFZRYXdpdFJ2MlNjZ0lrbUJzV2NOQmZwMUds?= =?utf-8?B?WHFsTzNCOTNwSmZUR3VEQjhZS3M0NkI5OXhZbGpSRUtvUCs1ZjhoUW9RMkJz?= =?utf-8?B?N2NtOHk4YXE1RzBnUDl6eElBQmxlY0xKT3hCWStMU3ZmSzcwZkdGVGFORHEx?= =?utf-8?B?V0NIK1RXRENtNTQzR0s5aGFFVTlDL0Z5WUdHS3crZzEzZXRkVGNoWEEyRGZ2?= =?utf-8?Q?BfQSm4Y2SPMlBiFU=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: e3f2d1cc-89c3-45a3-af95-08df1a5ab23b X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Sep 2026 16:41:35.2579 (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: XxUDJktSXYLGNIG+FWihPi+jRfDLKHCGSpq+otVYQ8VdqwaaNfuo2JWMFkm2aXupcAyN/0R9BGshoP/qI5t2ZEYHbhdOE4Pm4glZQahdW3Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BR0PR08MB151385 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