From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.160.176 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793899479; b=Icw2P+HNRHAGXMGbJ9Rua7cjpKYDsl7qGm9TWXCz9ZkVTdZzCCM8wfF2VciyKmDyzto4 6Q8EkTfo/ekCkPGaJrtUuoBw7a9pFpvC0vbduTXXwT2bQkKR7IGjoXF8fFK0tTU+kje7Y yni3sYbjnBhXDVCZmc1p0y1Z/FPX1RLIgLZ5z2tl5MD1XRWIn6qfBRsc0Ab/b1rydAF1x o+dbyw1EQnelZ4iHThXjhyFMJjOKb95OyIBESo9joMs1I5c8eRKZgZE4GCyWk2VJ8Vu3x rVL70wGGw6QyE61Oj/FEMVq7F9ImXH4T2sCfgvpPtH5UEHefiU8DlnPi6mZQFyWxC3w== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793899479; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; bh=+Sc9yPGaNTmoDAc39XzEsbXpXvtl7Fk3dFBI/g/ZPmw=; b=KBCjjB4sxeBIoBt8iUNCMvVl9Ozdaj/D2jj8dT4gcNbatijUjpM41jKojqk/syuMkGGx cEEVCOa9eiMKH2VH2lb5cepZkuevVHIEGYdB+aMFgod/Tq61CM4Cr2aMk282Za3K3ABry 8/sACgWpJK1/bU+FzRFv1fQ7CGWKLlMhWfDAMlwVd3C7OUpHf0dqdDEzBrKm0ma1wa1XM zdV6x6PHKERDWW8G5htGbtvacrGxzB7qdg8TysRC0a6hRU1L6e9Ki7Yjj3iOPoBVNehgj oTG8oJVrqOyDk1jmBlFX90z/4A3n6/zQUmyKxmKHU+io4/32JdEHVxfvWx1vSKoe9ww== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=rowland.harvard.edu; spf=fail smtp.mailfrom=g.harvard.edu; dkim=pass header.d=rowland.harvard.edu header.i=@rowland.harvard.edu header.a=rsa-sha256 header.s=google header.b=OXXcUxth; arc=none smtp.remote-ip=209.85.160.176 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 83E8C606D83F for ; Thu, 5 Nov 2026 17:24:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 83E8C606D83F Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rowland.harvard.edu Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=g.harvard.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=rowland.harvard.edu header.i=@rowland.harvard.edu header.a=rsa-sha256 header.s=google header.b=OXXcUxth Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-53653e30353so27927631cf.2 for ; Thu, 05 Nov 2026 09:24:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rowland.harvard.edu; s=google; t=1793899478; x=1794504278; darn=vger.kernel.org; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to:content-type; bh=+Sc9yPGaNTmoDAc39XzEsbXpXvtl7Fk3dFBI/g/ZPmw=; b=OXXcUxthtyymPU3fwfbcr40/daOdZ4UuV0IOhK3r7k3BfuoZd0x2qWahN2YNfUretu Tvwnl0KFWoKOeZb7Eb3uBsqzIqq8J25exR7V5CgkLuEPZfnZT4ED35Z0b9rlaw575Jgj FQy6EYxV5onXU0wpKN8YyESt8CkDTpTTkNBn9V25Xj56jakQJCIeQ+jbdgqM3xEfnuQB l6A1FG/uOsFRxdidxCtIsyNflhv6dRW8a6chHrMU0u2dgaNP3KFe01+lBZywKoRsUbeP mAwXyFk8XjT9tW3AtUvUEUaho7CfMrUWwbB5j2cn7aptAgB87xrCSo1TqcjbSZYZh8xc JpZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793899478; x=1794504278; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=+Sc9yPGaNTmoDAc39XzEsbXpXvtl7Fk3dFBI/g/ZPmw=; b=YAEAy/uaeUGw4JPlHcEJ8ZcPhlTvT1innJwiKBsy4HeniWK5jCDzsawaXqO+0S5UL5 P1TcwYn/YaI8cH6zKFPYhVlSi7qHzEBjFbTTuFUlFjJzdgFSyGOV4QTJvkskdns3xhbV orQ+wELLmhigpwwFeNX4UGNbqC+pbaDifJuUAB7Q6PrSBgiWkDkZG7ehZBqcCOm/9ebO 19+H0v3SVeovW0S/5RGIWuxQ0pl1E/qALI/Ipz4HZQ/gwmX5k58ome+41VkOTDxElxAF RZkVPh3HXIUUWwzzshfx4HZVWsvLiIq6HBOfbB1zAf7hCd0kUbBWwUfbnDN653k59gyG gvlA== X-Forwarded-Encrypted: i=1; AKwUvBx10wyxyiBMK3tV6PRr9kad0yRu8FppuXX/bm2qGSxf/jW01by+5zfIUSP4jo5LLR/mGtDw+fTL07ApPE8=@vger.kernel.org X-Gm-Message-State: APuU4Z9vb3MaKMU454cf2Ki0reFnnN2tmJML62gSh1e3aFi/6p3FylIW S4ZKUHlgmzwxLkDOX22OMV4bI+gykSrHpJT3+KS23a4foxRdNVXCGV4gEhM56yqwbQ== X-Gm-Gg: AYBFou1eBXm5eU93TpY6Ftop5Jh3vU2zOi0L1GYD4bs9tLbryCk6iyfQNuoum+Om1/r RrBMylP+sX+hhxubx5mK8FErY31VgBQNaxoPhaUZFxPUohjmWBy8CxtMl0+RPWAE/49i3Onoaco zy8wXo4MPNH4oCVj6vEW5ExP+aNaearUwupd974DkWPoi8p2zfbQiuv3Nvw34VHi+a8SsZ1Xabm Iow6soRssk8/rr/tav/Dz9Wdx09X7rbKbkc+hrQHbVqgfQJt51AAvLmZfvIGZIpN4LBT09a5Gz+ tBZQ9qPlvBfBfSodqF8Ye2AlDt1fKcCCjjDTifgbIGwPPe2Dw4AHg0KG/vTG/jcdYJ0PCr+5eeL zgYzUEPKSE17uQVA/KBi47tCHLCBQjZ9UNbyrVv9XiJx2qSE/3Ts6uf9nl/r4xaJX/ESEQ5kwQd 5cMJMyr5160ZNyf6c/qL3X6QUAXyJk6iJUeDlwXzg41/3ax5STcOSspdI6H4T8D3lHtUs7ITY0+ vgKaYe8eoSWLkeTxkma9JQ/2Bc/FtmREj9XZMVtA/y6paxfjBZMpxTpiXHfRaFho71VFuLSc+5x RnT16LgQpGRSPcxCVul77Ts3bbBk X-Received: by 2002:a05:622a:2515:b0:536:52ae:d92c with SMTP id d75a77b69052e-542b6e55bebmr328898701cf.35.1793899478212; Thu, 05 Nov 2026 09:24:38 -0800 (PST) Received: from rowland.harvard.edu ([2601:19b:d01:d210::66b0]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-54b10a6ca24sm57130131cf.14.2026.11.05.09.24.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Nov 2026 09:24:37 -0800 (PST) Date: Thu, 5 Nov 2026 12:24:33 -0500 From: Alan Stern To: Leon Romanovsky Cc: Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Dmitry Torokhov , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Jakub Kicinski , Paolo Abeni , Johannes Berg , Jonathan Corbet , Shuah Khan , Randy Dunlap , Bjorn Helgaas , "Joerg Roedel (AMD)" , Suravee Suthikulpanit , Vasant Hegde , Will Deacon , Robin Murphy , David Woodhouse , Lu Baolu , Johan Hovold , Eric Dumazet , Marcel Holtmann , Luiz Augusto von Dentz , Nipun Gupta , Nikhil Agarwal , Pieter Jansen van Vuuren , linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, linux-input@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, linux-usb@vger.kernel.org, linux-bluetooth@vger.kernel.org, linux-acpi@vger.kernel.org, linux-doc@vger.kernel.org, linux-pci@vger.kernel.org, iommu@lists.linux.dev, Jason Gunthorpe Subject: Re: [PATCH 05/17] USB: Lock registered interfaces during manual driver binding Message-ID: References: <20261105-device-trust-core-v1-0-1e536825b4eb@nvidia.com> <20261105-device-trust-core-v1-5-1e536825b4eb@nvidia.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20261105-device-trust-core-v1-5-1e536825b4eb@nvidia.com> On Thu, Nov 05, 2026 at 01:42:18PM +0200, Leon Romanovsky wrote: > From: Leon Romanovsky > > Interface claims hold the USB device lock, but device_bind_driver() > requires the target interface lock. Without it, trust-policy writes can > race admission. This says nothing about usb_driver_release_refused_claim() and the code related to it. It is an incomplete description of the patch. Note that nothing prevents drivers from using an interface they claim before that interface is registered. For your scheme to work properly, you should make sure the claim is authorized when usb_driver_claim_interface() is called, not when the interface is registered. Alan Stern > +/* > + * The driver core refused to bind an interface that a sibling claimed before > + * it was registered, and dropped the claim. Let the claimant release the > + * interface instead of operating it with a bound interface but no driver. > + */ > +void usb_driver_release_refused_claim(struct usb_interface *iface, > + struct device_driver *claimant) > +{ > + struct device *dev = &iface->dev; > + > + device_lock(dev); > + if (!dev->driver && iface->condition == USB_INTERFACE_BOUND) { > + dev->driver = claimant; > + usb_unbind_interface(dev); > + dev_set_drvdata(dev, NULL); > + dev->driver = NULL; > + } > + device_unlock(dev); > +} > + > /* returns 0 if no match, 1 if match */ > int usb_match_device(struct usb_device *dev, const struct usb_device_id *id) > { > diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c > index a738d03c23eac..d35a7710c8ef4 100644 > --- a/drivers/usb/core/message.c > +++ b/drivers/usb/core/message.c > @@ -2264,6 +2264,7 @@ int usb_set_configuration(struct usb_device *dev, int configuration) > */ > for (i = 0; i < nintf; ++i) { > struct usb_interface *intf = cp->interface[i]; > + struct device_driver *claimant; > > if (intf->dev.of_node && > !of_device_is_available(intf->dev.of_node)) { > @@ -2277,7 +2278,14 @@ int usb_set_configuration(struct usb_device *dev, int configuration) > dev_name(&intf->dev), configuration, > intf->cur_altsetting->desc.bInterfaceNumber); > device_enable_async_suspend(&intf->dev); > + claimant = intf->dev.driver; > + if (claimant && !try_module_get(claimant->owner)) > + claimant = NULL; > ret = device_add(&intf->dev); > + if (!ret && claimant && !intf->dev.driver) > + usb_driver_release_refused_claim(intf, claimant); > + if (claimant) > + module_put(claimant->owner); > if (ret != 0) { > dev_err(&dev->dev, "device_add(%s) --> %d\n", > dev_name(&intf->dev), ret); > diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h > index a9b37aeb515be..293340a48b6c5 100644 > --- a/drivers/usb/core/usb.h > +++ b/drivers/usb/core/usb.h > @@ -49,6 +49,8 @@ extern int usb_set_isoch_delay(struct usb_device *dev); > extern int usb_get_bos_descriptor(struct usb_device *dev); > extern void usb_release_bos_descriptor(struct usb_device *dev); > extern int usb_set_configuration(struct usb_device *dev, int configuration); > +void usb_driver_release_refused_claim(struct usb_interface *iface, > + struct device_driver *claimant); > extern int usb_choose_configuration(struct usb_device *udev); > extern int usb_generic_driver_probe(struct usb_device *udev); > extern void usb_generic_driver_disconnect(struct usb_device *udev); > > -- > 2.56.0