netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s
       [not found] <bug-12087-10286@http.bugzilla.kernel.org/>
@ 2008-11-23  5:35 ` Andrew Morton
  2008-11-23  6:03   ` Roland Dreier
                     ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Andrew Morton @ 2008-11-23  5:35 UTC (permalink / raw)
  To: netdev; +Cc: bugme-daemon, danielm77, Jay Cliburn


(switched to email.  Please respond via emailed reply-to-all, not via the
bugzilla web interface).

On Sat, 22 Nov 2008 21:11:51 -0800 (PST) bugme-daemon@bugzilla.kernel.org wrote:

> http://bugzilla.kernel.org/show_bug.cgi?id=12087
> 
>            Summary: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s
>            Product: Drivers
>            Version: 2.5
>      KernelVersion: latest git tree
>           Platform: All
>         OS/Version: Linux
>               Tree: Mainline
>             Status: NEW
>           Severity: normal
>           Priority: P1
>          Component: Network
>         AssignedTo: jgarzik@pobox.com
>         ReportedBy: danielm77@spray.se
> 
> 
> There will be a memory leak in the function alloc_ring when the parameter
> sw_size is nonzero and metadata is NULL. I don't know if that can happen.
> 
> Here is the code, taken from the latest git tree.
> 
> static void *alloc_ring(struct pci_dev *pdev, size_t nelem, size_t elem_size,
>                         size_t sw_size, dma_addr_t * phys, void *metadata)
> {
>         size_t len = nelem * elem_size;
>         void *s = NULL;
>         void *p = dma_alloc_coherent(&pdev->dev, len, phys, GFP_KERNEL);
> 
>         if (!p)
>                 return NULL;
>         if (sw_size) {
>                 s = kcalloc(nelem, sw_size, GFP_KERNEL);
> 
>                 if (!s) {
>                         dma_free_coherent(&pdev->dev, len, p, *phys);
>                         return NULL;
>                 }
>         }
>         if (metadata)
>                 *(void **)metadata = s;
>         memset(p, 0, len);
>         return p;
> }
> 
> 

yeah, that is a bit silly-looking.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s
  2008-11-23  5:35 ` [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s Andrew Morton
@ 2008-11-23  6:03   ` Roland Dreier
  2008-11-23 11:40   ` Jay Cliburn
  2008-11-27  8:26   ` Divy Le Ray
  2 siblings, 0 replies; 5+ messages in thread
From: Roland Dreier @ 2008-11-23  6:03 UTC (permalink / raw)
  To: Andrew Morton; +Cc: netdev, bugme-daemon, danielm77, Jay Cliburn

> There will be a memory leak in the function alloc_ring when the parameter
> sw_size is nonzero and metadata is NULL. I don't know if that can happen.
> 
> Here is the code, taken from the latest git tree.
> 
> static void *alloc_ring(struct pci_dev *pdev, size_t nelem, size_t elem_size,
>                         size_t sw_size, dma_addr_t * phys, void *metadata)

It might make sense to stick a WARN_ON(sw_size && !metadata) in that
function or something like that, but a quick audit of the current code
(there are only 4 callers of alloc_ring() in that file -- and it's
static so we know those are all of them -- all in t3_sge_alloc_qset())
shows that all callers pass non-NULL metadata if sw_size != 0.

 - R.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s
  2008-11-23  5:35 ` [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s Andrew Morton
  2008-11-23  6:03   ` Roland Dreier
@ 2008-11-23 11:40   ` Jay Cliburn
  2008-11-24 17:04     ` Divy Le Ray
  2008-11-27  8:26   ` Divy Le Ray
  2 siblings, 1 reply; 5+ messages in thread
From: Jay Cliburn @ 2008-11-23 11:40 UTC (permalink / raw)
  To: Andrew Morton; +Cc: netdev, bugme-daemon, danielm77, divy

[adding cxgb3 maintainer to cc list]

On Sat, 22 Nov 2008 21:35:32 -0800
Andrew Morton <akpm@linux-foundation.org> wrote:

> 
> (switched to email.  Please respond via emailed reply-to-all, not via
> the bugzilla web interface).
> 
> On Sat, 22 Nov 2008 21:11:51 -0800 (PST)
> bugme-daemon@bugzilla.kernel.org wrote:
> 
> > http://bugzilla.kernel.org/show_bug.cgi?id=12087
> > 
> >            Summary: [drivers/net/cxgb3/sge.c:563]: Possible memory
> > leak: s Product: Drivers
> >            Version: 2.5
> >      KernelVersion: latest git tree
> >           Platform: All
> >         OS/Version: Linux
> >               Tree: Mainline
> >             Status: NEW
> >           Severity: normal
> >           Priority: P1
> >          Component: Network
> >         AssignedTo: jgarzik@pobox.com
> >         ReportedBy: danielm77@spray.se
> > 
> > 
> > There will be a memory leak in the function alloc_ring when the
> > parameter sw_size is nonzero and metadata is NULL. I don't know if
> > that can happen.
> > 
> > Here is the code, taken from the latest git tree.
> > 
> > static void *alloc_ring(struct pci_dev *pdev, size_t nelem, size_t
> > elem_size, size_t sw_size, dma_addr_t * phys, void *metadata)
> > {
> >         size_t len = nelem * elem_size;
> >         void *s = NULL;
> >         void *p = dma_alloc_coherent(&pdev->dev, len, phys,
> > GFP_KERNEL);
> > 
> >         if (!p)
> >                 return NULL;
> >         if (sw_size) {
> >                 s = kcalloc(nelem, sw_size, GFP_KERNEL);
> > 
> >                 if (!s) {
> >                         dma_free_coherent(&pdev->dev, len, p,
> > *phys); return NULL;
> >                 }
> >         }
> >         if (metadata)
> >                 *(void **)metadata = s;
> >         memset(p, 0, len);
> >         return p;
> > }
> > 
> > 
> 
> yeah, that is a bit silly-looking.
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s
  2008-11-23 11:40   ` Jay Cliburn
@ 2008-11-24 17:04     ` Divy Le Ray
  0 siblings, 0 replies; 5+ messages in thread
From: Divy Le Ray @ 2008-11-24 17:04 UTC (permalink / raw)
  To: Jay Cliburn; +Cc: Andrew Morton, netdev, bugme-daemon, danielm77

Jay Cliburn wrote:
> [adding cxgb3 maintainer to cc list]

Thanks, I'll look at this.

Divy

> 
> On Sat, 22 Nov 2008 21:35:32 -0800
> Andrew Morton <akpm@linux-foundation.org> wrote:
> 
>>
>> (switched to email.  Please respond via emailed reply-to-all, not via
>> the bugzilla web interface).
>>
>> On Sat, 22 Nov 2008 21:11:51 -0800 (PST)
>> bugme-daemon@bugzilla.kernel.org wrote:
>>
>> > http://bugzilla.kernel.org/show_bug.cgi?id=12087
>> >
>> >            Summary: [drivers/net/cxgb3/sge.c:563]: Possible memory
>> > leak: s Product: Drivers
>> >            Version: 2.5
>> >      KernelVersion: latest git tree
>> >           Platform: All
>> >         OS/Version: Linux
>> >               Tree: Mainline
>> >             Status: NEW
>> >           Severity: normal
>> >           Priority: P1
>> >          Component: Network
>> >         AssignedTo: jgarzik@pobox.com
>> >         ReportedBy: danielm77@spray.se
>> >
>> >
>> > There will be a memory leak in the function alloc_ring when the
>> > parameter sw_size is nonzero and metadata is NULL. I don't know if
>> > that can happen.
>> >
>> > Here is the code, taken from the latest git tree.
>> >
>> > static void *alloc_ring(struct pci_dev *pdev, size_t nelem, size_t
>> > elem_size, size_t sw_size, dma_addr_t * phys, void *metadata)
>> > {
>> >         size_t len = nelem * elem_size;
>> >         void *s = NULL;
>> >         void *p = dma_alloc_coherent(&pdev->dev, len, phys,
>> > GFP_KERNEL);
>> >
>> >         if (!p)
>> >                 return NULL;
>> >         if (sw_size) {
>> >                 s = kcalloc(nelem, sw_size, GFP_KERNEL);
>> >
>> >                 if (!s) {
>> >                         dma_free_coherent(&pdev->dev, len, p,
>> > *phys); return NULL;
>> >                 }
>> >         }
>> >         if (metadata)
>> >                 *(void **)metadata = s;
>> >         memset(p, 0, len);
>> >         return p;
>> > }
>> >
>> >
>>
>> yeah, that is a bit silly-looking.
>> --
>> To unsubscribe from this list: send the line "unsubscribe netdev" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s
  2008-11-23  5:35 ` [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s Andrew Morton
  2008-11-23  6:03   ` Roland Dreier
  2008-11-23 11:40   ` Jay Cliburn
@ 2008-11-27  8:26   ` Divy Le Ray
  2 siblings, 0 replies; 5+ messages in thread
From: Divy Le Ray @ 2008-11-27  8:26 UTC (permalink / raw)
  To: Andrew Morton; +Cc: netdev, bugme-daemon, danielm77, Jay Cliburn

Andrew Morton wrote:
> (switched to email.  Please respond via emailed reply-to-all, not via the
> bugzilla web interface).
> 
> On Sat, 22 Nov 2008 21:11:51 -0800 (PST) bugme-daemon@bugzilla.kernel.org wrote:
> 
>> http://bugzilla.kernel.org/show_bug.cgi?id=12087
>>
>>            Summary: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s
>>            Product: Drivers
>>            Version: 2.5
>>      KernelVersion: latest git tree
>>           Platform: All
>>         OS/Version: Linux
>>               Tree: Mainline
>>             Status: NEW
>>           Severity: normal
>>           Priority: P1
>>          Component: Network
>>         AssignedTo: jgarzik@pobox.com
>>         ReportedBy: danielm77@spray.se
>>
>>
>> There will be a memory leak in the function alloc_ring when the parameter
>> sw_size is nonzero and metadata is NULL. I don't know if that can happen.
>>
>> Here is the code, taken from the latest git tree.
>>
>> static void *alloc_ring(struct pci_dev *pdev, size_t nelem, size_t elem_size,
>>                         size_t sw_size, dma_addr_t * phys, void *metadata)
>> {
>>         size_t len = nelem * elem_size;
>>         void *s = NULL;
>>         void *p = dma_alloc_coherent(&pdev->dev, len, phys, GFP_KERNEL);
>>
>>         if (!p)
>>                 return NULL;
>>         if (sw_size) {
>>                 s = kcalloc(nelem, sw_size, GFP_KERNEL);
>>
>>                 if (!s) {
>>                         dma_free_coherent(&pdev->dev, len, p, *phys);
>>                         return NULL;
>>                 }
>>         }
>>         if (metadata)
>>                 *(void **)metadata = s;
>>         memset(p, 0, len);
>>         return p;
>> }
>>
>>
> 
> yeah, that is a bit silly-looking.

The following patch should hopefully take care of this issue:
http://git.kernel.org/?p=linux/kernel/git/davem/net-next-2.6.git;a=commitdiff;h=5256554489531f3e177e7308752d8f0681cdd5a6

Cheers,
Divy

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-11-27  8:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <bug-12087-10286@http.bugzilla.kernel.org/>
2008-11-23  5:35 ` [Bugme-new] [Bug 12087] New: [drivers/net/cxgb3/sge.c:563]: Possible memory leak: s Andrew Morton
2008-11-23  6:03   ` Roland Dreier
2008-11-23 11:40   ` Jay Cliburn
2008-11-24 17:04     ` Divy Le Ray
2008-11-27  8:26   ` Divy Le Ray

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).