From: Marco Elver <elver@google.com>
To: andrey.konovalov@linux.dev
Cc: Alexander Potapenko <glider@google.com>,
Andrey Konovalov <andreyknvl@gmail.com>,
Dmitry Vyukov <dvyukov@google.com>,
Vlastimil Babka <vbabka@suse.cz>,
kasan-dev@googlegroups.com, Evgenii Stepanov <eugenis@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Andrey Konovalov <andreyknvl@google.com>
Subject: Re: [PATCH 15/15] kasan: use stack_depot_evict for tag-based modes
Date: Wed, 30 Aug 2023 11:38:08 +0200 [thread overview]
Message-ID: <ZO8OACjoGtRuy1Rm@elver.google.com> (raw)
In-Reply-To: <f7ab7ad4013669f25808bb0e39b3613b98189063.1693328501.git.andreyknvl@google.com>
On Tue, Aug 29, 2023 at 07:11PM +0200, andrey.konovalov@linux.dev wrote:
> From: Andrey Konovalov <andreyknvl@google.com>
>
> Evict stack traces from the stack depot for the tag-based KASAN modes
> once they are evicted from the stack ring.
>
> Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
> ---
> mm/kasan/tags.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/mm/kasan/tags.c b/mm/kasan/tags.c
> index 7dcfe341d48e..fa6b0f77a7dd 100644
> --- a/mm/kasan/tags.c
> +++ b/mm/kasan/tags.c
> @@ -96,7 +96,7 @@ static void save_stack_info(struct kmem_cache *cache, void *object,
> gfp_t gfp_flags, bool is_free)
> {
> unsigned long flags;
> - depot_stack_handle_t stack;
> + depot_stack_handle_t stack, old_stack;
> u64 pos;
> struct kasan_stack_ring_entry *entry;
> void *old_ptr;
> @@ -120,6 +120,8 @@ static void save_stack_info(struct kmem_cache *cache, void *object,
> if (!try_cmpxchg(&entry->ptr, &old_ptr, STACK_RING_BUSY_PTR))
> goto next; /* Busy slot. */
>
> + old_stack = READ_ONCE(entry->stack);
Why READ_ONCE? Is it possible that there is a concurrent writer once the
slot has been "locked" with STACK_RING_BUSY_PTR?
If there is no concurrency, it would be clearer to leave it unmarked and
add a comment to that effect. (I also think a comment would be good to
say what the WRITE_ONCE below pair with, because at this point I've
forgotten.)
> WRITE_ONCE(entry->size, cache->object_size);
> WRITE_ONCE(entry->pid, current->pid);
> WRITE_ONCE(entry->stack, stack);
> @@ -131,6 +133,9 @@ static void save_stack_info(struct kmem_cache *cache, void *object,
> smp_store_release(&entry->ptr, (s64)object);
>
> read_unlock_irqrestore(&stack_ring.lock, flags);
> +
> + if (old_stack)
> + stack_depot_evict(old_stack);
> }
>
> void kasan_save_alloc_info(struct kmem_cache *cache, void *object, gfp_t flags)
> --
> 2.25.1
>
next prev parent reply other threads:[~2023-08-30 9:38 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-29 17:11 [PATCH 00/15] stackdepot: allow evicting stack traces andrey.konovalov
2023-08-29 17:11 ` [PATCH 01/15] stackdepot: check disabled flag when fetching andrey.konovalov
2023-08-30 7:40 ` Alexander Potapenko
2023-08-29 17:11 ` [PATCH 02/15] stackdepot: simplify __stack_depot_save andrey.konovalov
2023-08-30 7:41 ` Alexander Potapenko
2023-08-29 17:11 ` [PATCH 03/15] stackdepot: drop valid bit from handles andrey.konovalov
2023-08-30 7:43 ` Alexander Potapenko
2023-08-29 17:11 ` [PATCH 04/15] stackdepot: add depot_fetch_stack helper andrey.konovalov
2023-08-30 7:47 ` Alexander Potapenko
2023-08-29 17:11 ` [PATCH 05/15] stackdepot: use fixed-sized slots for stack records andrey.konovalov
2023-08-30 8:21 ` Alexander Potapenko
2023-09-13 17:07 ` Andrey Konovalov
2023-09-15 10:36 ` Alexander Potapenko
2023-08-29 17:11 ` [PATCH 06/15] stackdepot: fix and clean-up atomic annotations andrey.konovalov
2023-08-30 8:34 ` Marco Elver
2023-09-04 18:45 ` Andrey Konovalov
2023-08-29 17:11 ` [PATCH 07/15] stackdepot: rework helpers for depot_alloc_stack andrey.konovalov
2023-08-29 17:11 ` [PATCH 08/15] stackdepot: rename next_pool_required to new_pool_required andrey.konovalov
2023-08-30 8:29 ` Alexander Potapenko
2023-08-29 17:11 ` [PATCH 09/15] stackdepot: store next pool pointer in new_pool andrey.konovalov
2023-08-29 17:11 ` [PATCH 10/15] stackdepot: store free stack records in a freelist andrey.konovalov
2023-08-29 17:11 ` [PATCH 11/15] stackdepot: use read/write lock andrey.konovalov
2023-08-30 9:13 ` Marco Elver
2023-09-04 18:46 ` Andrey Konovalov
2023-09-05 16:19 ` Marco Elver
2023-09-13 17:08 ` Andrey Konovalov
2024-01-02 12:59 ` Marco Elver
2024-01-09 3:27 ` Andrey Konovalov
2023-08-29 17:11 ` [PATCH 12/15] stackdepot: add refcount for records andrey.konovalov
2023-08-30 9:32 ` Marco Elver
2023-09-04 18:46 ` Andrey Konovalov
2023-09-04 18:55 ` Marco Elver
2023-09-13 17:07 ` Andrey Konovalov
2023-09-01 13:06 ` Kuan-Ying Lee (李冠穎)
2023-09-04 18:46 ` Andrey Konovalov
2023-08-29 17:11 ` [PATCH 13/15] stackdepot: add backwards links to hash table buckets andrey.konovalov
2023-08-30 9:24 ` Marco Elver
2023-09-13 17:07 ` Andrey Konovalov
2023-08-29 17:11 ` [PATCH 14/15] stackdepot: allow users to evict stack traces andrey.konovalov
2023-08-30 9:20 ` Marco Elver
2023-09-04 18:47 ` Andrey Konovalov
2023-08-29 17:11 ` [PATCH 15/15] kasan: use stack_depot_evict for tag-based modes andrey.konovalov
2023-08-30 9:38 ` Marco Elver [this message]
2023-09-04 18:48 ` Andrey Konovalov
2023-09-04 18:58 ` Marco Elver
2023-09-13 17:08 ` Andrey Konovalov
2023-08-30 7:46 ` [PATCH 00/15] stackdepot: allow evicting stack traces Vlastimil Babka
2023-09-04 18:45 ` Andrey Konovalov
2023-09-05 2:48 ` Kuan-Ying Lee (李冠穎)
2023-09-13 17:10 ` Andrey Konovalov
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=ZO8OACjoGtRuy1Rm@elver.google.com \
--to=elver@google.com \
--cc=akpm@linux-foundation.org \
--cc=andrey.konovalov@linux.dev \
--cc=andreyknvl@gmail.com \
--cc=andreyknvl@google.com \
--cc=dvyukov@google.com \
--cc=eugenis@google.com \
--cc=glider@google.com \
--cc=kasan-dev@googlegroups.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=vbabka@suse.cz \
/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.