2021-07-31 16:12:10

by Salah Triki

[permalink] [raw]
Subject: [PATCH v2] tablet: acecad: update the reference count of the usb interface structure

Based on the following documentation usb_get_inf(), use usb_get_intf()
and usb_put_intf() in order to update the reference count of the usb
interface structure.

Documentation of usb_get_inf():

[quote]
Each live reference to a interface must be refcounted.

Drivers for USB interfaces should normally record such references
in their probe methods, when they bind to an interface, and release them
by calling usb_put_intf, in their disconnect methods.
[/quote]

Signed-off-by: Salah Triki <[email protected]>
---
Change since v1:
Modification of the description

drivers/input/tablet/acecad.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/input/tablet/acecad.c b/drivers/input/tablet/acecad.c
index a38d1fe97334..85fe134a30ee 100644
--- a/drivers/input/tablet/acecad.c
+++ b/drivers/input/tablet/acecad.c
@@ -151,7 +151,7 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
goto fail2;
}

- acecad->intf = intf;
+ acecad->intf = usb_get_intf(intf);
acecad->input = input_dev;

if (dev->manufacturer)
@@ -236,6 +236,9 @@ static void usb_acecad_disconnect(struct usb_interface *intf)
input_unregister_device(acecad->input);
usb_free_urb(acecad->irq);
usb_free_coherent(udev, 8, acecad->data, acecad->data_dma);
+
+ usb_put_intf(acecad->intf);
+
kfree(acecad);
}

--
2.25.1



2021-08-04 11:14:24

by Dan Carpenter

[permalink] [raw]
Subject: Re: [PATCH v2] tablet: acecad: update the reference count of the usb interface structure

On Sat, Jul 31, 2021 at 05:09:38PM +0100, Salah Triki wrote:
> drivers/input/tablet/acecad.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/input/tablet/acecad.c b/drivers/input/tablet/acecad.c
> index a38d1fe97334..85fe134a30ee 100644
> --- a/drivers/input/tablet/acecad.c
> +++ b/drivers/input/tablet/acecad.c
> @@ -151,7 +151,7 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
> goto fail2;
> }
>
> - acecad->intf = intf;
> + acecad->intf = usb_get_intf(intf);
> acecad->input = input_dev;
>
> if (dev->manufacturer)

As I mentioned earlier, you need to drop the reference if
input_register_device() fails.

regards,
dan carpenter



2021-08-04 11:17:11

by Dan Carpenter

[permalink] [raw]
Subject: Re: [PATCH v2] tablet: acecad: update the reference count of the usb interface structure

On Sat, Jul 31, 2021 at 05:09:38PM +0100, Salah Triki wrote:
> Based on the following documentation usb_get_inf(), use usb_get_intf()
> and usb_put_intf() in order to update the reference count of the usb
> interface structure.
>
> Documentation of usb_get_inf():
>
> [quote]
> Each live reference to a interface must be refcounted.
>
> Drivers for USB interfaces should normally record such references
> in their probe methods, when they bind to an interface, and release them
> by calling usb_put_intf, in their disconnect methods.
> [/quote]
>
> Signed-off-by: Salah Triki <[email protected]>

Also add a Fixes tag.

regards,
dan carpenter


2021-08-04 13:10:28

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH v2] tablet: acecad: update the reference count of the usb interface structure

On Wed, Aug 04, 2021 at 01:58:38PM +0300, Dan Carpenter wrote:
> On Sat, Jul 31, 2021 at 05:09:38PM +0100, Salah Triki wrote:
> > drivers/input/tablet/acecad.c | 5 ++++-
> > 1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/input/tablet/acecad.c b/drivers/input/tablet/acecad.c
> > index a38d1fe97334..85fe134a30ee 100644
> > --- a/drivers/input/tablet/acecad.c
> > +++ b/drivers/input/tablet/acecad.c
> > @@ -151,7 +151,7 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
> > goto fail2;
> > }
> >
> > - acecad->intf = intf;
> > + acecad->intf = usb_get_intf(intf);
> > acecad->input = input_dev;
> >
> > if (dev->manufacturer)
>
> As I mentioned earlier, you need to drop the reference if
> input_register_device() fails.

Also as mentioned in other threads, this is not needed at all.