lkml.org 
[lkml]   [2023]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 15/15] kasan: use stack_depot_evict for tag-based modes
    Date
    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);
    +
    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
    \
     
     \ /
      Last update: 2023-08-29 19:16    [W:2.894 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site