From: Catalin Marinas <catalin.marinas@arm.com>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: wang xiaolei <xiaolei.wang@windriver.com>,
akpm@linux-foundation.org, glider@google.com,
andreyknvl@gmail.com, zhaoyang.huang@unisoc.com,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] mm/kmemleak: No need to check kmemleak_initialized in set_track_prepare()
Date: Mon, 14 Aug 2023 17:20:58 +0100 [thread overview]
Message-ID: <ZNpUal2iJZXqpMN3@arm.com> (raw)
In-Reply-To: <dbffe403-3419-58b3-cf94-ea4119c1c00d@suse.cz>
On Fri, Aug 11, 2023 at 10:09:08AM +0200, Vlastimil Babka wrote:
> On 8/11/23 04:03, wang xiaolei wrote:
> > On 8/10/23 9:16 PM, Vlastimil Babka wrote:
> >> Looking closer, I think what you want could be achieved by kmemleak_init()
> >> setting a variable that is checked in kmemleak_initialized() instead of the
> >> kmemleak_initialized that's set too late.
> >>
> >> I think this should work because:
> >> - I assume kmemleak can't record anything before kmemleak_init()
> >> - stack depot early init is requested one way or the other
> >> - mm_core_init() calls stack_depot_early_init() before kmemleak_init()
> >>
> >> But I also wonder how kmemleak can even reach set_track_prepare() before
> >> kmemleak_init(), maybe that's the issue?
> >
> > Before kmemleak_init, many places also need to allocate kmemleak_object,
> >
> > and also need to save stack in advance, but kmemleak_object is allocated
> >
> > in the form of an array, after kmemleak_init 'object_cache =
> > KMEM_CACHE(kmemleak_object, SLAB_NOLEAKTRACE);'
>
> Hm I see, kmemleak has this static mempool so it really can record some
> objects very early.
Indeed, otherwise we'd get a lot of false positives.
> > I think there is still some memory not recorded on the backtrace before
> >
> > stack_depot_early_init(), does anyone have a better suggestion?
>
> No we can't record the backtrace earlier. But I don't think it's a problem
> in practice. AFAIU kmemleak needs to record these very early allocations so
> if they point to further objects, those are not suspected as orphans. But
> the early allocations themselves also are very unlikely to be leaks, so does
> it really matter that we don't have a backtrace for their allocation?
> Because the backtrace is the only thing that's missing - the object is
> otherwise recorded even if set_track_prepare() returns 0.
It's not a functional problem, just a reporting one. There are
rare early leaks (usually false positives) so identifying them would
help. That said, I think set_track_prepare() is too conservative in
waiting for kmemleak_initialized to be set in kmemleak_late_init().
That's a late_initcall() meant for the scanning thread etc. not the core
kmemleak functionality (which is on from early boot).
We can instead use a different variable to check in set_track_prepare(),
e.g. object_cache. stack_depot_early_init() is called prior to
kmemleak_init(), so it should be fine.
If "kmemleak_initialized" is confusing, we could rename it to
"kmemleak_late_initialized" or "kmemleak_fully_initialized". I'm not too
fussed about this as long as we add some comment on why we check
object_cache instead of kmemleak_initialized.
--
Catalin
next prev parent reply other threads:[~2023-08-14 16:21 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-10 7:47 [PATCH 0/2] Bail out in __stack_depot_save() if the stack_table is not allocated and delete the kmemleak_initialized judgment in set_track_prepare() Xiaolei Wang
2023-08-10 7:47 ` [PATCH 1/2] lib/stackdepot: Bail out in __stack_depot_save() if the stack_table is not allocated Xiaolei Wang
2023-08-10 9:53 ` Vlastimil Babka
2023-08-11 2:02 ` wang xiaolei
2023-08-10 7:47 ` [PATCH 2/2] mm/kmemleak: No need to check kmemleak_initialized in set_track_prepare() Xiaolei Wang
2023-08-10 10:03 ` Vlastimil Babka
2023-08-10 10:16 ` Vlastimil Babka
2023-08-11 2:03 ` wang xiaolei
2023-08-11 8:09 ` Vlastimil Babka
2023-08-14 16:20 ` Catalin Marinas [this message]
2023-08-15 2:27 ` wangxiaolei
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=ZNpUal2iJZXqpMN3@arm.com \
--to=catalin.marinas@arm.com \
--cc=akpm@linux-foundation.org \
--cc=andreyknvl@gmail.com \
--cc=glider@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=vbabka@suse.cz \
--cc=xiaolei.wang@windriver.com \
--cc=zhaoyang.huang@unisoc.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.