All of lore.kernel.org
 help / color / mirror / Atom feed
From: andrey.konovalov@linux.dev
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Konovalov <andreyknvl@gmail.com>,
	Marco Elver <elver@google.com>,
	Alexander Potapenko <glider@google.com>,
	Dmitry Vyukov <dvyukov@google.com>,
	Andrey Ryabinin <ryabinin.a.a@gmail.com>,
	kasan-dev@googlegroups.com, Peter Collingbourne <pcc@google.com>,
	Evgenii Stepanov <eugenis@google.com>,
	Florian Mayer <fmayer@google.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Andrey Konovalov <andreyknvl@google.com>
Subject: [PATCH mm v3 04/34] kasan: split save_alloc_info implementations
Date: Mon,  5 Sep 2022 23:05:19 +0200	[thread overview]
Message-ID: <77f1a078489c1e859aedb5403f772e5e1f7410a0.1662411799.git.andreyknvl@google.com> (raw)
In-Reply-To: <cover.1662411799.git.andreyknvl@google.com>

From: Andrey Konovalov <andreyknvl@google.com>

Provide standalone implementations of save_alloc_info() for the Generic
and tag-based modes.

For now, the implementations are the same, but they will diverge later
in the series.

Reviewed-by: Marco Elver <elver@google.com>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
 mm/kasan/common.c  | 13 ++-----------
 mm/kasan/generic.c |  9 +++++++++
 mm/kasan/kasan.h   |  1 +
 mm/kasan/tags.c    |  9 +++++++++
 4 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/mm/kasan/common.c b/mm/kasan/common.c
index 6a75237ed308..93e64e1b4413 100644
--- a/mm/kasan/common.c
+++ b/mm/kasan/common.c
@@ -424,15 +424,6 @@ void __kasan_slab_free_mempool(void *ptr, unsigned long ip)
 	}
 }
 
-static void save_alloc_info(struct kmem_cache *cache, void *object, gfp_t flags)
-{
-	struct kasan_alloc_meta *alloc_meta;
-
-	alloc_meta = kasan_get_alloc_meta(cache, object);
-	if (alloc_meta)
-		kasan_set_track(&alloc_meta->alloc_track, flags);
-}
-
 void * __must_check __kasan_slab_alloc(struct kmem_cache *cache,
 					void *object, gfp_t flags, bool init)
 {
@@ -463,7 +454,7 @@ void * __must_check __kasan_slab_alloc(struct kmem_cache *cache,
 
 	/* Save alloc info (if possible) for non-kmalloc() allocations. */
 	if (kasan_stack_collection_enabled() && !cache->kasan_info.is_kmalloc)
-		save_alloc_info(cache, (void *)object, flags);
+		kasan_save_alloc_info(cache, (void *)object, flags);
 
 	return tagged_object;
 }
@@ -509,7 +500,7 @@ static inline void *____kasan_kmalloc(struct kmem_cache *cache,
 	 * This also rewrites the alloc info when called from kasan_krealloc().
 	 */
 	if (kasan_stack_collection_enabled() && cache->kasan_info.is_kmalloc)
-		save_alloc_info(cache, (void *)object, flags);
+		kasan_save_alloc_info(cache, (void *)object, flags);
 
 	/* Keep the tag that was set by kasan_slab_alloc(). */
 	return (void *)object;
diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c
index 03a3770cfeae..98c451a3b01f 100644
--- a/mm/kasan/generic.c
+++ b/mm/kasan/generic.c
@@ -358,6 +358,15 @@ void kasan_record_aux_stack_noalloc(void *addr)
 	return __kasan_record_aux_stack(addr, false);
 }
 
+void kasan_save_alloc_info(struct kmem_cache *cache, void *object, gfp_t flags)
+{
+	struct kasan_alloc_meta *alloc_meta;
+
+	alloc_meta = kasan_get_alloc_meta(cache, object);
+	if (alloc_meta)
+		kasan_set_track(&alloc_meta->alloc_track, flags);
+}
+
 void kasan_save_free_info(struct kmem_cache *cache,
 				void *object, u8 tag)
 {
diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h
index bf16a74dc027..d401fb770f67 100644
--- a/mm/kasan/kasan.h
+++ b/mm/kasan/kasan.h
@@ -285,6 +285,7 @@ struct slab *kasan_addr_to_slab(const void *addr);
 
 depot_stack_handle_t kasan_save_stack(gfp_t flags, bool can_alloc);
 void kasan_set_track(struct kasan_track *track, gfp_t flags);
+void kasan_save_alloc_info(struct kmem_cache *cache, void *object, gfp_t flags);
 void kasan_save_free_info(struct kmem_cache *cache, void *object, u8 tag);
 struct kasan_track *kasan_get_free_track(struct kmem_cache *cache,
 				void *object, u8 tag);
diff --git a/mm/kasan/tags.c b/mm/kasan/tags.c
index b453a353bc86..1ba3c8399f72 100644
--- a/mm/kasan/tags.c
+++ b/mm/kasan/tags.c
@@ -17,6 +17,15 @@
 
 #include "kasan.h"
 
+void kasan_save_alloc_info(struct kmem_cache *cache, void *object, gfp_t flags)
+{
+	struct kasan_alloc_meta *alloc_meta;
+
+	alloc_meta = kasan_get_alloc_meta(cache, object);
+	if (alloc_meta)
+		kasan_set_track(&alloc_meta->alloc_track, flags);
+}
+
 void kasan_save_free_info(struct kmem_cache *cache,
 				void *object, u8 tag)
 {
-- 
2.25.1


  parent reply	other threads:[~2022-09-05 21:06 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-05 21:05 [PATCH mm v3 00/34] kasan: switch tag-based modes to stack ring from per-object metadata andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 01/34] kasan: check KASAN_NO_FREE_META in __kasan_metadata_size andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 02/34] kasan: rename kasan_set_*_info to kasan_save_*_info andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 03/34] kasan: move is_kmalloc check out of save_alloc_info andrey.konovalov
2022-09-05 21:05 ` andrey.konovalov [this message]
2022-09-05 21:05 ` [PATCH mm v3 05/34] kasan: drop CONFIG_KASAN_TAGS_IDENTIFY andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 06/34] kasan: introduce kasan_print_aux_stacks andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 07/34] kasan: introduce kasan_get_alloc_track andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 08/34] kasan: introduce kasan_init_object_meta andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 09/34] kasan: clear metadata functions for tag-based modes andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 10/34] kasan: move kasan_get_*_meta to generic.c andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 11/34] kasan: introduce kasan_requires_meta andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 12/34] kasan: introduce kasan_init_cache_meta andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 13/34] kasan: drop CONFIG_KASAN_GENERIC check from kasan_init_cache_meta andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 14/34] kasan: only define kasan_metadata_size for Generic mode andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 15/34] kasan: only define kasan_never_merge " andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 16/34] kasan: only define metadata offsets " andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 17/34] kasan: only define metadata structs " andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 18/34] kasan: only define kasan_cache_create " andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 19/34] kasan: pass tagged pointers to kasan_save_alloc/free_info andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 20/34] kasan: move kasan_get_alloc/free_track definitions andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 21/34] kasan: cosmetic changes in report.c andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 22/34] kasan: use virt_addr_valid in kasan_addr_to_page/slab andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 23/34] kasan: use kasan_addr_to_slab in print_address_description andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 24/34] kasan: make kasan_addr_to_page static andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 25/34] kasan: simplify print_report andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 26/34] kasan: introduce complete_report_info andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 27/34] kasan: fill in cache and object in complete_report_info andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 28/34] kasan: rework function arguments in report.c andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 29/34] kasan: introduce kasan_complete_mode_report_info andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 30/34] kasan: implement stack ring for tag-based modes andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 31/34] kasan: support kasan.stacktrace for SW_TAGS andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 32/34] kasan: dynamically allocate stack ring entries andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 33/34] kasan: better identify bug types for tag-based modes andrey.konovalov
2022-09-05 21:05 ` [PATCH mm v3 34/34] kasan: add another use-after-free test andrey.konovalov
2022-09-11 11:50 ` [PATCH mm v3 00/34] kasan: switch tag-based modes to stack ring from per-object metadata Andrey Konovalov
2022-09-12  9:39   ` Marco Elver
2022-09-12 20:06     ` Andrew Morton
2022-09-19  8:07       ` Yu Zhao
2022-09-20 18:59         ` 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=77f1a078489c1e859aedb5403f772e5e1f7410a0.1662411799.git.andreyknvl@google.com \
    --to=andrey.konovalov@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=andreyknvl@gmail.com \
    --cc=andreyknvl@google.com \
    --cc=dvyukov@google.com \
    --cc=elver@google.com \
    --cc=eugenis@google.com \
    --cc=fmayer@google.com \
    --cc=glider@google.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=pcc@google.com \
    --cc=ryabinin.a.a@gmail.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.