linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vincent MAILHOL <mailhol.vincent@wanadoo.fr>
To: Rhett Aultman <rhett.aultman@samsara.com>
Cc: wg@grandegger.com, Marc Kleine-Budde <mkl@pengutronix.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-can@vger.kernel.org, linux-usb@vger.kernel.org
Subject: Re: [PATCH] can: gs_usb: gs_usb_open/close( ) fix memory leak
Date: Sat, 4 Jun 2022 23:53:17 +0900	[thread overview]
Message-ID: <CAMZ6RqKttF5Qw3abeMWTqdV+U-cSmZj7P5cFWqRNok7HPb9dfg@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.22.394.2206041003320.1657582@thelappy>

On Sat. 4 juin 2022 at 23:08, Rhett Aultman <rhett.aultman@samsara.com> wrote:
> On Sat, 4 Jun 2022, Vincent MAILHOL wrote:
>
> > > For me, the natural fix would be:
> > >
> > > diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
> > > index 33d62d7e3929..1460fdac0b18 100644
> > > --- a/drivers/usb/core/urb.c
> > > +++ b/drivers/usb/core/urb.c
> > > @@ -22,6 +22,9 @@ static void urb_destroy(struct kref *kref)
> > >
> > >         if (urb->transfer_flags & URB_FREE_BUFFER)
> > >                 kfree(urb->transfer_buffer);
> > > +       else if (urb->transfer_flags & URB_FREE_COHERENT)
> > > +               usb_free_coherent(urb->dev, urb->transfer_buffer_length,
> > > +                                 urb->transfer_buffer, urb->transfer_dma);
> > >
> > >         kfree(urb);
> > >  }
> > > diff --git a/include/linux/usb.h b/include/linux/usb.h
> > > index 200b7b79acb5..dfc348d56fed 100644
> > > --- a/include/linux/usb.h
> > > +++ b/include/linux/usb.h
> > > @@ -1328,6 +1328,7 @@ extern int usb_disabled(void);
> > >  #define URB_NO_INTERRUPT       0x0080  /* HINT: no non-error interrupt
> > >                                          * needed */
> > >  #define URB_FREE_BUFFER                0x0100  /* Free transfer buffer with the URB */
> > > +#define URB_FREE_COHERENT      0x0200  /* Free DMA memory of transfer buffer */
> >
> > #define URB_FREE_COHERENT      0x0400  /* Free DMA memory of transfer buffer */
> >
> > Obviously, the value 0x0200 is already taken by URB_DIR_IN just below.
> > So 0x0400 seems more adequate.
> > Sorry for the noise.
>
> Now that you've pointed this out, I agree this appears to be the more
> natural way to handle things.  I will take a point of making a rewrite
> here.  Additionally, I'll do my best to bring all the other USB CAN
> drivers in line with this.

For the background, I also had a lot of trouble understanding the
logic of how to usb_free_coherent() URBs when I wrote my own driver
(etas_es58x). At the end, I just mimicked what other USB CAN drivers
were doing which means that the etas_es58x was most certainly also
contaminated by that malady.

I really appreciate your effort to also want to fix others' drivers.

> My only concern in doing that is that I have
> gs_usb devices to confirm the fix with but not devices for the other
> drivers.
>
> > > Maybe I missed something obvious, but if so, I would like to
> > > understand what is wrong in above approach.
>
> I don't think anything is wrong with the above approach.

I hope so. Sometimes, there are some complicated intricacies which are
hard to appreciate (and I am not an expert of the USB subsystem). This
is why I CCed the USB mailing list. If I am wrong, someone should
eventually shout at me.

> I just happened
> to see an issue in the gs_usb driver that was already fixed in the other
> USB CAN drivers, and adapted the fix used in the other drivers to the
> gs_usb one.  Doing so got your attention and you pointed out a more
> general fix, so I agree with going this route.  I'll post a new patch this
> week.

I sent you a patch. You can build on top of it the fixes for the other drivers.
And do not hesitate to resend it as part of your series (and in that
particular case, you would need to explicitly add the From: tag).


Yours sincerely,
Vincent Mailhol

  parent reply	other threads:[~2022-06-04 14:53 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-03 19:52 [PATCH 001/001] can: gs_usb: gs_usb_open/close( ) fix memory leak Rhett Aultman
2022-06-04  2:11 ` [PATCH] " Vincent Mailhol
2022-06-04  2:26   ` Vincent MAILHOL
2022-06-04 14:08     ` Rhett Aultman
2022-06-04 14:41       ` [RFC PATCH] USB: core: urb: add new transfer flag URB_FREE_COHERENT Vincent Mailhol
2022-06-04 16:40         ` Alan Stern
2022-06-05  2:04           ` Vincent MAILHOL
2022-06-05  6:00           ` Oliver Neukum
2022-06-05 13:45             ` Vincent MAILHOL
2022-06-07  9:49               ` Oliver Neukum
2022-06-07 10:18                 ` Vincent MAILHOL
2022-06-07 11:46                   ` Oliver Neukum
2022-06-07 12:12                     ` Vincent MAILHOL
2022-06-05  2:15         ` [RFC PATCH v2] usb: " Vincent Mailhol
2022-06-04 14:53       ` Vincent MAILHOL [this message]
2022-06-09 20:47 ` [PATCH v2 0/3] URB_FREE_COHERENT gs_usb memory leak fix Rhett Aultman
2022-06-09 20:47   ` [PATCH v2 1/3] drivers: usb/core/urb: Add URB_FREE_COHERENT Rhett Aultman
2022-06-10  0:18     ` Vincent MAILHOL
2022-06-10 10:46       ` Marc Kleine-Budde
2022-06-09 20:47   ` [PATCH v2 2/3] drivers: usb/core/urb: allow URB_FREE_COHERENT Rhett Aultman
2022-06-09 23:18     ` Vincent Mailhol
2022-06-09 20:47   ` [PATCH v2 3/3] can: gs_usb: fix DMA memory leak on close Rhett Aultman
2022-06-10  0:05     ` Vincent Mailhol
2022-06-10  1:28       ` Vincent Mailhol
2022-06-10 21:33   ` [PATCH v3 0/2] URB_FREE_COHERENT gs_usb memory leak fix Rhett Aultman
2022-06-10 21:33     ` [PATCH v3 1/2] drivers: usb/core/urb: Add URB_FREE_COHERENT Rhett Aultman
2022-06-11 15:31       ` Marc Kleine-Budde
2022-06-11 16:06         ` Vincent MAILHOL
2022-06-21 13:51           ` Greg Kroah-Hartman
2022-06-21 14:59             ` Vincent MAILHOL
2022-06-21 15:03               ` Greg Kroah-Hartman
2022-06-21 15:54                 ` Vincent MAILHOL
2022-06-21 15:11               ` Alan Stern
2022-06-21 15:55                 ` Vincent MAILHOL
2022-06-21 16:14                   ` Alan Stern
2022-06-21 16:40                     ` Vincent MAILHOL
2022-06-21 17:00                       ` Greg Kroah-Hartman
2022-06-21 17:14                         ` Vincent MAILHOL
2022-06-21 17:46                           ` Greg Kroah-Hartman
2022-06-22  9:22                   ` David Laight
2022-06-22  9:41                     ` Greg Kroah-Hartman
2022-06-22 10:03                       ` David Laight
2022-06-22 11:11                         ` Oliver Neukum
2022-06-22 10:34                       ` Vincent MAILHOL
2022-06-22 12:23                         ` Greg Kroah-Hartman
2022-06-22 15:59                           ` Vincent MAILHOL
2022-06-22 18:11                             ` Rhett Aultman
2022-06-26  8:21                               ` Vincent MAILHOL
2022-06-27 19:24                                 ` Rhett Aultman
2022-06-28  1:09                                   ` Vincent MAILHOL
2022-07-04 13:02                                     ` Marc Kleine-Budde
2022-07-04 15:35                                       ` Rhett Aultman
2022-07-05  7:50                                         ` Marc Kleine-Budde
2022-06-23 17:30       ` Hongren Zenithal Zheng
2022-06-23 17:45         ` Shuah Khan
2022-06-24 14:43           ` Alan Stern
2022-06-24 16:01             ` Hongren Zenithal Zheng
2022-06-24 16:31             ` Shuah Khan
2022-06-24 18:07               ` Alan Stern
2022-06-27 22:54                 ` Shuah Khan
2022-06-28  1:35                   ` Alan Stern
2022-07-01  2:10                     ` Shuah Khan
2022-08-01 17:42                       ` Shuah Khan
2022-08-01 18:28                         ` Vincent MAILHOL
2022-08-03 23:44                           ` Shuah Khan
2022-06-10 21:33     ` [PATCH v3 2/2] can: gs_usb: fix DMA memory leak on close Rhett Aultman
2022-06-11 15:35       ` Marc Kleine-Budde
2022-06-11 16:03         ` Vincent MAILHOL
2022-06-12 21:28       ` David Laight
2022-06-12 21:33         ` Marc Kleine-Budde
2022-06-14 15:26     ` [PATCH v4 0/1] URB_FREE_COHERENT gs_usb memory leak fix Rhett Aultman
2022-06-14 15:26       ` [PATCH v4 1/1] can: gs_usb: fix DMA memory leak on close Rhett Aultman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMZ6RqKttF5Qw3abeMWTqdV+U-cSmZj7P5cFWqRNok7HPb9dfg@mail.gmail.com \
    --to=mailhol.vincent@wanadoo.fr \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=rhett.aultman@samsara.com \
    --cc=wg@grandegger.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).