mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Catalin Marinas <catalin.marinas@arm.com>
To: Pekka Enberg <penberg@cs.helsinki.fi>
Cc: linux-kernel@vger.kernel.org,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Ingo Molnar <mingo@elte.hu>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH 01/15] kmemleak: Add the base support
Date: Fri, 12 Dec 2008 11:36:17 +0000	[thread overview]
Message-ID: <1229081777.15045.8.camel@pc1117.cambridge.arm.com> (raw)
In-Reply-To: <84144f020812111401n78f980a3v101b3518ab5a3b20@mail.gmail.com>

On Fri, 2008-12-12 at 00:01 +0200, Pekka Enberg wrote:
> On Wed, Dec 10, 2008 at 8:26 PM, Catalin Marinas
> <catalin.marinas@arm.com> wrote:
> > +static void put_object(struct memleak_object *object)
> > +{
> > +       if (!atomic_dec_and_test(&object->use_count))
> > +               return;
> > +
> > +       /* should only get here after delete_object was called */
> > +       BUG_ON(object->flags & OBJECT_ALLOCATED);
> 
> This could be
> 
>     if (WARN_ON(object->flags & OBJECT_ALLOCATED))
>             return;

I'm not sure just warning would be enough. If this happens, its a severe
bug in kmemleak and the tool is no longer useful (it could even leak
memory or free already freed blocks). I could change it to a
memleak_panic call but if the object use_count isn't reliable, the
memleak_disable call wouldn't work properly either.

> > +static void create_object(unsigned long ptr, size_t size, int min_count,
> > +                         gfp_t gfp)
> > +{
> > +       unsigned long flags;
> > +       struct memleak_object *object;
> > +       struct prio_tree_node *node;
> > +       struct stack_trace trace;
> > +
> > +       object = kmem_cache_alloc(object_cache, gfp);
> > +       if (!object)
> > +               memleak_panic("kmemleak: Cannot allocate a memleak_object "
> > +                             "structure\n");
> 
> Don't you want to exit early here if object == NULL?

Yes, indeed. That omission was caused by s/panic/memleak_panic/

> > +       if (node != &object->tree_node) {
> > +               unsigned long flags;
> > +
> > +               pr_warning("kmemleak: Existing pointer\n");
> > +               dump_stack();
> 
> How come you don't dump_stack() or even WARN_ON() unconditionally in
> kmemleak_panic() which is called bit later so you can remove this kind
> of ad hoc logging?

Yes, I'll unify these via the memleak_panic() macro.

> > +static void delete_object(unsigned long ptr)
> > +{
> > +       unsigned long flags;
> > +       struct memleak_object *object;
> > +
> > +       write_lock_irqsave(&memleak_lock, flags);
> > +       object = lookup_object(ptr, 0);
> > +       if (!object) {
> > +               pr_warning("kmemleak: Freeing unknown object at 0x%08lx\n",
> > +                          ptr);
> > +               dump_stack();
> 
> Hmm, dump_stack() is called in quite a few places. Might make sense to
> add a memleak_report() function that does this in an uniform way.

Yes.

> > +               write_unlock_irqrestore(&memleak_lock, flags);
> > +               return;
> > +       }
> > +       prio_tree_remove(&object_tree_root, &object->tree_node);
> > +       list_del_rcu(&object->object_list);
> > +       write_unlock_irqrestore(&memleak_lock, flags);
> > +
> > +       BUG_ON(!(object->flags & OBJECT_ALLOCATED));
> > +       BUG_ON(atomic_read(&object->use_count) < 1);
> 
> These could be converted to WARN_ON() calls, I think?

See my comment above, these are genuine kmemleak bugs and it shouldn't
just warn. Hopefully they will never happen unless a get/put_object is
missing.

Thanks.

-- 
Catalin


  reply	other threads:[~2008-12-12 11:36 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-10 18:26 [PATCH 00/15] Kernel memory leak detector Catalin Marinas
2008-12-10 18:26 ` [PATCH 01/15] kmemleak: Add the base support Catalin Marinas
2008-12-11 22:01   ` Pekka Enberg
2008-12-12 11:36     ` Catalin Marinas [this message]
2008-12-12 13:14       ` Pekka Enberg
2008-12-16 19:36   ` Paul E. McKenney
2008-12-17  9:44     ` Catalin Marinas
2008-12-17 17:15       ` Paul E. McKenney
2008-12-10 18:27 ` [PATCH 02/15] kmemleak: Add documentation on the memory leak detector Catalin Marinas
2008-12-10 18:27 ` [PATCH 03/15] kmemleak: Add the slab memory allocation/freeing hooks Catalin Marinas
2008-12-10 18:32   ` Dave Hansen
2008-12-10 18:53   ` Dave Hansen
2008-12-11 21:22   ` Pekka Enberg
2008-12-12 14:27     ` Catalin Marinas
2008-12-18 10:46       ` Pekka Enberg
2008-12-18 16:38         ` Catalin Marinas
2008-12-18 16:49           ` Christoph Lameter
2008-12-18 17:02             ` Catalin Marinas
2008-12-18 19:35               ` Christoph Lameter
2008-12-18 20:06                 ` Pekka Enberg
2008-12-18 21:41                   ` Christoph Lameter
2008-12-19 10:44                     ` Catalin Marinas
2008-12-10 18:27 ` [PATCH 04/15] kmemleak: Add the slob " Catalin Marinas
2008-12-10 18:36   ` Matt Mackall
2008-12-11  9:47     ` Catalin Marinas
2008-12-11 21:37   ` Pekka Enberg
2008-12-10 18:27 ` [PATCH 05/15] kmemleak: Add the slub " Catalin Marinas
2008-12-11 21:30   ` Pekka Enberg
2008-12-12 13:45     ` Catalin Marinas
2008-12-18 10:51       ` Pekka Enberg
2008-12-18 15:28         ` Catalin Marinas
2008-12-18 16:05           ` Pekka Enberg
2008-12-10 18:27 ` [PATCH 06/15] kmemleak: Add the vmalloc " Catalin Marinas
2008-12-10 18:27 ` [PATCH 07/15] kmemleak: Add memleak_alloc callback from alloc_large_system_hash Catalin Marinas
2008-12-10 19:04   ` Dave Hansen
2008-12-11  9:50     ` Catalin Marinas
2008-12-11 10:08       ` Catalin Marinas
2008-12-11 17:30       ` Dave Hansen
2008-12-11 17:38         ` Catalin Marinas
2008-12-11 17:45           ` Dave Hansen
2008-12-11 19:47             ` Pekka Enberg
2008-12-12 17:04               ` Catalin Marinas
2008-12-12 17:17                 ` Dave Hansen
2008-12-12 17:43                   ` Catalin Marinas
2008-12-10 18:27 ` [PATCH 08/15] kmemleak: Add modules support Catalin Marinas
2008-12-10 18:27 ` [PATCH 09/15] x86: Provide _sdata in the vmlinux_*.lds.S files Catalin Marinas
2008-12-10 18:27 ` [PATCH 10/15] arm: Provide _sdata and __bss_stop in the vmlinux.lds.S file Catalin Marinas
2008-12-10 18:27 ` [PATCH 11/15] kmemleak: Remove some of the kmemleak false positives Catalin Marinas
2008-12-10 18:28 ` [PATCH 12/15] kmemleak: Enable the building of the memory leak detector Catalin Marinas
2008-12-10 19:20   ` Dave Hansen
2008-12-12 17:27     ` Catalin Marinas
2008-12-12 18:02       ` Dave Hansen
2008-12-10 18:28 ` [PATCH 13/15] kmemleak: Keep the __init functions after initialization Catalin Marinas
2008-12-10 18:44   ` Sam Ravnborg
2008-12-17 13:09     ` Catalin Marinas
2008-12-10 18:28 ` [PATCH 14/15] kmemleak: Simple testing module for kmemleak Catalin Marinas
2008-12-10 18:28 ` [PATCH 15/15] kmemleak: Add the corresponding MAINTAINERS entry Catalin Marinas
2008-12-11  9:44 ` [PATCH 00/15] Kernel memory leak detector Catalin Marinas
  -- strict thread matches above, loose matches on Subject: below --
2008-11-29 10:43 Catalin Marinas
2008-11-29 10:43 ` [PATCH 01/15] kmemleak: Add the base support Catalin Marinas
2008-12-01  5:39   ` Yasunori Goto
2008-12-01  6:49     ` Pekka Enberg
2008-12-01  8:11       ` Yasunori Goto
2008-12-01 12:29       ` Catalin Marinas
2008-12-01  7:15   ` Pekka Enberg
2008-12-02 21:28   ` Andrew Morton
2008-12-04 18:50     ` Catalin Marinas
2008-12-04 19:03       ` Andrew Morton
2008-12-18  9:28     ` Catalin Marinas

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=1229081777.15045.8.camel@pc1117.cambridge.arm.com \
    --to=catalin.marinas@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=penberg@cs.helsinki.fi \
    /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

all inboxes | Powered by JetHome®