Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752882AbdDDHr6 (ORCPT ); Tue, 4 Apr 2017 03:47:58 -0400 Received: from mga06.intel.com ([134.134.136.31]:18848 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752268AbdDDHr4 (ORCPT ); Tue, 4 Apr 2017 03:47:56 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,274,1486454400"; d="asc'?scan'208";a="1150597185" From: Felipe Balbi To: Alan Stern , Roger Quadros Cc: vivek.gautam@codeaurora.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 1/3] usb: udc: allow adding and removing the same gadget device In-Reply-To: References: Date: Tue, 04 Apr 2017 10:47:38 +0300 Message-ID: <87d1csipgl.fsf@linux.intel.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2575 Lines: 79 --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, Alan Stern writes: > On Mon, 3 Apr 2017, Roger Quadros wrote: > >> allow usb_del_gadget_udc() and usb add_gadget_udc() to be called >> repeatedly on the same gadget->dev structure. >>=20 >> We need to clear the gadget->dev structure so that kobject_init() >> doesn't complain about already initialized object. >>=20 >> Signed-off-by: Roger Quadros >> --- >> drivers/usb/gadget/udc/core.c | 1 + >> 1 file changed, 1 insertion(+) >>=20 >> diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core= .c >> index d685d82..efce68e 100644 >> --- a/drivers/usb/gadget/udc/core.c >> +++ b/drivers/usb/gadget/udc/core.c >> @@ -1273,6 +1273,7 @@ void usb_del_gadget_udc(struct usb_gadget *gadget) >> flush_work(&gadget->work); >> device_unregister(&udc->dev); >> device_unregister(&gadget->dev); >> + memset(&gadget->dev, 0x00, sizeof(gadget->dev)); >> } >> EXPORT_SYMBOL_GPL(usb_del_gadget_udc); > > Isn't this dangerous? It's quite possible that the device_unregister()=20 not on the gadget API, no. > call on the previous line invokes the gadget->dev.release callback,=20 > which might deallocate gadget. If that happens, your new memset will=20 > oops. that won't happen. struct usb_gadget is a member of the UDC's private structure, like this: struct dwc3 { [...] struct usb_gadget gadget; struct usb_gadget_driver *gadget_driver; [...] }; I'm actually thinking that struct usb_gadget shouldn't have a struct device at all. Just a pointer to a device, that would solve all these issues. =2D-=20 balbi --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEElLzh7wn96CXwjh2IzL64meEamQYFAljjT5oACgkQzL64meEa mQbkhw/9GbEeXrB5fA2oen+SkvwjoFMQMqjaZgt4VXksasp3dTsa8bSraD58aHSI 10vtvZ9VBtxx2/QkOYsZrG3Z+4GLJVdOgr+DSB+xP76ZESSwRIWEJCdRoA0A5GWB vMgYN0RkphwYMd5oLGIBdJQQbTAuZKnUgy0b83+f1+CUcTyNM9waIfsZZXTcJN5F 9IgAcpimUhNxhhZfhxm4ELmyFlIydrwVBp9H3syMoeZPldmGlBUN+7zI6QX/HWat 1N6EQRHdt1pdytX3rjL4BZURcrJF4uc259GARdqLIwwTxcu6ERmiQnXoYGT12iTy y2b+QhBlG+YI5Lk/p6yjZxnjeR7gIiEAQjDXbjz6gU/Pa/Dxtbs8SC4MKMuu+W5l XnETfEc19JACLnDjKTpD6KHwD+0qoujRESJ9mrmet1y2RHDYCm+wR5aXkGhA8y6F hoXU1KAXrKn+IXldd60DAgr9gXKbszrXSaYJrP4K5enRXp1vPO796TQGpRW3Z8jW KBx8PS+NARRYXpfgjLCWDvIsgKMJUEVOhBwEnjChrUOtva2lNWHGQdlCqjAYwIoR P+lZVUGQerSHtdUuDqyTBkwxihhUYa0zCP/RUe8RddAM0PBC4oTH3PN1/MTsf5l0 2adwx3YAyqZvYAtNlZ2CvOJ3WEeUgL6j67UeeVKeyv+HMXLHfq4= =TeJ1 -----END PGP SIGNATURE----- --=-=-=--