From: Andrew Morton <akpm@linux-foundation.org>
To: akpm@linux-foundation.org, andreyknvl@google.com,
aryabinin@virtuozzo.com, Branislav.Rankov@arm.com,
catalin.marinas@arm.com, dvyukov@google.com, elver@google.com,
eugenis@google.com, glider@google.com, gor@linux.ibm.com,
kevin.brodsky@arm.com, linux-mm@kvack.org,
mm-commits@vger.kernel.org, torvalds@linux-foundation.org,
vincenzo.frascino@arm.com, will.deacon@arm.com
Subject: [patch 54/60] kasan, mm: rename kasan_poison_kfree
Date: Tue, 22 Dec 2020 12:03:13 -0800 [thread overview]
Message-ID: <20201222200313.0kdHaewuD%akpm@linux-foundation.org> (raw)
In-Reply-To: <20201222115844.d30aaef7df6f5b120d3e0c3d@linux-foundation.org>
From: Andrey Konovalov <andreyknvl@google.com>
Subject: kasan, mm: rename kasan_poison_kfree
Rename kasan_poison_kfree() to kasan_slab_free_mempool() as it better
reflects what this annotation does. Also add a comment that explains the
PageSlab() check.
No functional changes.
Link: https://lkml.kernel.org/r/141675fb493555e984c5dca555e9d9f768c7bbaa.1606162397.git.andreyknvl@google.com
Link: https://linux-review.googlesource.com/id/I5026f87364e556b506ef1baee725144bb04b8810
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Reviewed-by: Marco Elver <elver@google.com>
Tested-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Branislav Rankov <Branislav.Rankov@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Evgenii Stepanov <eugenis@google.com>
Cc: Kevin Brodsky <kevin.brodsky@arm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
include/linux/kasan.h | 16 ++++++++--------
mm/kasan/common.c | 40 +++++++++++++++++++++++-----------------
mm/mempool.c | 2 +-
3 files changed, 32 insertions(+), 26 deletions(-)
--- a/include/linux/kasan.h~kasan-mm-rename-kasan_poison_kfree
+++ a/include/linux/kasan.h
@@ -176,6 +176,13 @@ static __always_inline bool kasan_slab_f
return false;
}
+void __kasan_slab_free_mempool(void *ptr, unsigned long ip);
+static __always_inline void kasan_slab_free_mempool(void *ptr, unsigned long ip)
+{
+ if (kasan_enabled())
+ __kasan_slab_free_mempool(ptr, ip);
+}
+
void * __must_check __kasan_slab_alloc(struct kmem_cache *s,
void *object, gfp_t flags);
static __always_inline void * __must_check kasan_slab_alloc(
@@ -216,13 +223,6 @@ static __always_inline void * __must_che
return (void *)object;
}
-void __kasan_poison_kfree(void *ptr, unsigned long ip);
-static __always_inline void kasan_poison_kfree(void *ptr, unsigned long ip)
-{
- if (kasan_enabled())
- __kasan_poison_kfree(ptr, ip);
-}
-
void __kasan_kfree_large(void *ptr, unsigned long ip);
static __always_inline void kasan_kfree_large(void *ptr, unsigned long ip)
{
@@ -261,6 +261,7 @@ static inline bool kasan_slab_free(struc
{
return false;
}
+static inline void kasan_slab_free_mempool(void *ptr, unsigned long ip) {}
static inline void *kasan_slab_alloc(struct kmem_cache *s, void *object,
gfp_t flags)
{
@@ -280,7 +281,6 @@ static inline void *kasan_krealloc(const
{
return (void *)object;
}
-static inline void kasan_poison_kfree(void *ptr, unsigned long ip) {}
static inline void kasan_kfree_large(void *ptr, unsigned long ip) {}
#endif /* CONFIG_KASAN */
--- a/mm/kasan/common.c~kasan-mm-rename-kasan_poison_kfree
+++ a/mm/kasan/common.c
@@ -331,6 +331,29 @@ bool __kasan_slab_free(struct kmem_cache
return ____kasan_slab_free(cache, object, ip, true);
}
+void __kasan_slab_free_mempool(void *ptr, unsigned long ip)
+{
+ struct page *page;
+
+ page = virt_to_head_page(ptr);
+
+ /*
+ * Even though this function is only called for kmem_cache_alloc and
+ * kmalloc backed mempool allocations, those allocations can still be
+ * !PageSlab() when the size provided to kmalloc is larger than
+ * KMALLOC_MAX_SIZE, and kmalloc falls back onto page_alloc.
+ */
+ if (unlikely(!PageSlab(page))) {
+ if (ptr != page_address(page)) {
+ kasan_report_invalid_free(ptr, ip);
+ return;
+ }
+ poison_range(ptr, page_size(page), KASAN_FREE_PAGE);
+ } else {
+ ____kasan_slab_free(page->slab_cache, ptr, ip, false);
+ }
+}
+
static void set_alloc_info(struct kmem_cache *cache, void *object, gfp_t flags)
{
kasan_set_track(&kasan_get_alloc_meta(cache, object)->alloc_track, flags);
@@ -422,23 +445,6 @@ void * __must_check __kasan_krealloc(con
flags, true);
}
-void __kasan_poison_kfree(void *ptr, unsigned long ip)
-{
- struct page *page;
-
- page = virt_to_head_page(ptr);
-
- if (unlikely(!PageSlab(page))) {
- if (ptr != page_address(page)) {
- kasan_report_invalid_free(ptr, ip);
- return;
- }
- poison_range(ptr, page_size(page), KASAN_FREE_PAGE);
- } else {
- ____kasan_slab_free(page->slab_cache, ptr, ip, false);
- }
-}
-
void __kasan_kfree_large(void *ptr, unsigned long ip)
{
if (ptr != page_address(virt_to_head_page(ptr)))
--- a/mm/mempool.c~kasan-mm-rename-kasan_poison_kfree
+++ a/mm/mempool.c
@@ -104,7 +104,7 @@ static inline void poison_element(mempoo
static __always_inline void kasan_poison_element(mempool_t *pool, void *element)
{
if (pool->alloc == mempool_alloc_slab || pool->alloc == mempool_kmalloc)
- kasan_poison_kfree(element, _RET_IP_);
+ kasan_slab_free_mempool(element, _RET_IP_);
else if (pool->alloc == mempool_alloc_pages)
kasan_free_pages(element, (unsigned long)pool->pool_data);
}
_
next prev parent reply other threads:[~2020-12-22 20:04 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-22 19:58 incoming Andrew Morton
2020-12-22 20:00 ` [patch 01/60] kasan: drop unnecessary GPL text from comment headers Andrew Morton
2020-12-22 20:00 ` [patch 02/60] kasan: KASAN_VMALLOC depends on KASAN_GENERIC Andrew Morton
2020-12-22 20:00 ` [patch 03/60] kasan: group vmalloc code Andrew Morton
2020-12-22 20:00 ` [patch 04/60] kasan: shadow declarations only for software modes Andrew Morton
2020-12-22 20:00 ` [patch 05/60] kasan: rename (un)poison_shadow to (un)poison_range Andrew Morton
2020-12-22 20:00 ` [patch 06/60] kasan: rename KASAN_SHADOW_* to KASAN_GRANULE_* Andrew Morton
2020-12-22 20:00 ` [patch 07/60] kasan: only build init.c for software modes Andrew Morton
2020-12-22 20:00 ` [patch 08/60] kasan: split out shadow.c from common.c Andrew Morton
2020-12-22 20:00 ` [patch 09/60] kasan: define KASAN_MEMORY_PER_SHADOW_PAGE Andrew Morton
2020-12-22 20:00 ` [patch 10/60] kasan: rename report and tags files Andrew Morton
2020-12-22 20:00 ` [patch 11/60] kasan: don't duplicate config dependencies Andrew Morton
2020-12-22 20:00 ` [patch 12/60] kasan: hide invalid free check implementation Andrew Morton
2020-12-22 20:00 ` [patch 13/60] kasan: decode stack frame only with KASAN_STACK_ENABLE Andrew Morton
2020-12-22 20:00 ` [patch 14/60] kasan, arm64: only init shadow for software modes Andrew Morton
2020-12-22 20:00 ` [patch 15/60] kasan, arm64: only use kasan_depth " Andrew Morton
2020-12-22 20:01 ` [patch 16/60] kasan, arm64: move initialization message Andrew Morton
2020-12-22 20:01 ` [patch 17/60] kasan, arm64: rename kasan_init_tags and mark as __init Andrew Morton
2020-12-22 20:01 ` [patch 18/60] kasan: rename addr_has_shadow to addr_has_metadata Andrew Morton
2020-12-22 20:01 ` [patch 19/60] kasan: rename print_shadow_for_address to print_memory_metadata Andrew Morton
2020-12-22 20:01 ` [patch 20/60] kasan: rename SHADOW layout macros to META Andrew Morton
2020-12-22 20:01 ` [patch 21/60] kasan: separate metadata_fetch_row for each mode Andrew Morton
2020-12-22 20:01 ` [patch 22/60] kasan: introduce CONFIG_KASAN_HW_TAGS Andrew Morton
2020-12-22 20:01 ` [patch 23/60] arm64: enable armv8.5-a asm-arch option Andrew Morton
2020-12-22 20:01 ` [patch 24/60] arm64: mte: add in-kernel MTE helpers Andrew Morton
2020-12-22 20:01 ` [patch 25/60] arm64: mte: reset the page tag in page->flags Andrew Morton
2020-12-22 20:01 ` [patch 26/60] arm64: mte: add in-kernel tag fault handler Andrew Morton
2020-12-22 20:01 ` [patch 27/60] arm64: kasan: allow enabling in-kernel MTE Andrew Morton
2020-12-22 20:01 ` [patch 28/60] arm64: mte: convert gcr_user into an exclude mask Andrew Morton
2020-12-22 20:01 ` [patch 29/60] arm64: mte: switch GCR_EL1 in kernel entry and exit Andrew Morton
2020-12-22 20:01 ` [patch 30/60] kasan, mm: untag page address in free_reserved_area Andrew Morton
2020-12-22 20:01 ` [patch 31/60] arm64: kasan: align allocations for HW_TAGS Andrew Morton
2020-12-22 20:01 ` [patch 32/60] arm64: kasan: add arch layer for memory tagging helpers Andrew Morton
2020-12-22 20:01 ` [patch 33/60] kasan: define KASAN_GRANULE_SIZE for HW_TAGS Andrew Morton
2020-12-22 20:02 ` [patch 34/60] kasan, x86, s390: update undef CONFIG_KASAN Andrew Morton
2020-12-22 20:02 ` [patch 35/60] kasan, arm64: expand CONFIG_KASAN checks Andrew Morton
2020-12-22 20:02 ` [patch 36/60] kasan, arm64: implement HW_TAGS runtime Andrew Morton
2020-12-22 20:02 ` [patch 37/60] kasan, arm64: print report from tag fault handler Andrew Morton
2020-12-22 20:02 ` [patch 38/60] kasan, mm: reset tags when accessing metadata Andrew Morton
2020-12-22 20:02 ` [patch 39/60] kasan, arm64: enable CONFIG_KASAN_HW_TAGS Andrew Morton
2020-12-22 20:02 ` [patch 40/60] kasan: add documentation for hardware tag-based mode Andrew Morton
2020-12-22 20:02 ` [patch 41/60] kselftest/arm64: check GCR_EL1 after context switch Andrew Morton
2020-12-22 20:02 ` [patch 42/60] kasan: simplify quarantine_put call site Andrew Morton
2020-12-22 20:02 ` [patch 43/60] kasan: rename get_alloc/free_info Andrew Morton
2020-12-22 20:02 ` [patch 44/60] kasan: introduce set_alloc_info Andrew Morton
2020-12-22 20:02 ` [patch 45/60] kasan, arm64: unpoison stack only with CONFIG_KASAN_STACK Andrew Morton
2020-12-22 20:02 ` [patch 46/60] kasan: allow VMAP_STACK for HW_TAGS mode Andrew Morton
2020-12-22 20:02 ` [patch 47/60] kasan: remove __kasan_unpoison_stack Andrew Morton
2020-12-22 20:02 ` [patch 48/60] kasan: inline kasan_reset_tag for tag-based modes Andrew Morton
2020-12-22 20:02 ` [patch 49/60] kasan: inline random_tag for HW_TAGS Andrew Morton
2020-12-22 20:02 ` [patch 50/60] kasan: open-code kasan_unpoison_slab Andrew Morton
2020-12-22 20:03 ` [patch 51/60] kasan: inline (un)poison_range and check_invalid_free Andrew Morton
2020-12-22 20:03 ` [patch 52/60] kasan: add and integrate kasan boot parameters Andrew Morton
2020-12-22 20:03 ` [patch 53/60] kasan, mm: check kasan_enabled in annotations Andrew Morton
2020-12-22 20:03 ` Andrew Morton [this message]
2020-12-22 20:03 ` [patch 55/60] kasan: don't round_up too much Andrew Morton
2020-12-22 20:03 ` [patch 56/60] kasan: simplify assign_tag and set_tag calls Andrew Morton
2020-12-22 20:03 ` [patch 57/60] kasan: clarify comment in __kasan_kfree_large Andrew Morton
2020-12-22 20:03 ` [patch 58/60] kasan: sanitize objects when metadata doesn't fit Andrew Morton
2020-12-22 20:03 ` [patch 59/60] kasan, mm: allow cache merging with no metadata Andrew Morton
2020-12-22 20:03 ` [patch 60/60] kasan: update documentation Andrew Morton
2020-12-22 21:43 ` incoming Linus Torvalds
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=20201222200313.0kdHaewuD%akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=Branislav.Rankov@arm.com \
--cc=andreyknvl@google.com \
--cc=aryabinin@virtuozzo.com \
--cc=catalin.marinas@arm.com \
--cc=dvyukov@google.com \
--cc=elver@google.com \
--cc=eugenis@google.com \
--cc=glider@google.com \
--cc=gor@linux.ibm.com \
--cc=kevin.brodsky@arm.com \
--cc=linux-mm@kvack.org \
--cc=mm-commits@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=vincenzo.frascino@arm.com \
--cc=will.deacon@arm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).