kasan-only-define-kasan_cache_create-for-generic-mode.patch removed from -mm tree
The quilt patch titled
Subject: kasan: only define kasan_cache_create for Generic mode
has been removed from the -mm tree. Its filename was
kasan-only-define-kasan_cache_create-for-generic-mode.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Andrey Konovalov <[email protected]>
Subject: kasan: only define kasan_cache_create for Generic mode
Date: Mon, 5 Sep 2022 23:05:33 +0200
Right now, kasan_cache_create() assigns SLAB_KASAN for all KASAN modes and then sets up metadata-related cache parameters for the Generic mode.
SLAB_KASAN is used in two places:
1. In slab_ksize() to account for per-object metadata when calculating the size of the accessible memory within the object.
2. In slab_common.c via kasan_never_merge() to prevent merging of caches with per-object metadata.
Both cases are only relevant when per-object metadata is present, which is only the case with the Generic mode.
Thus, assign SLAB_KASAN and define kasan_cache_create() only for the Generic mode.
Also update the SLAB_KASAN-related comment.
---
include/linux/kasan.h | 18 ++++++------------ include/linux/slab.h | 2 +- mm/kasan/common.c | 16 ---------------- mm/kasan/generic.c | 17 ++++++++++++++++- 4 files changed, 23 insertions(+), 30 deletions(-)
include/linux/kasan.h renamed from include/linux/kasan.h~kasan-only-define-kasan_cache_create-for-generic-mode +6 -12
@@ -128,15 +128,6 @@ static __always_inline void kasan_unpois__kasan_unpoison_pages (page, order, init); } -void __kasan_cache_create (struct kmem_cache *cache,unsigned int *size, -slab_flags_t *flags); -static __always_inline void kasan_cache_create(struct kmem_cache *cache, -unsigned int *size,slab_flags_t *flags) -{ -if (kasan_enabled ()) -__kasan_cache_create (cache, size, flags); -} -void __kasan_cache_create_kmalloc (struct kmem_cache *cache); static __always_inline void kasan_cache_create_kmalloc(struct kmem_cache *cache) {
@@ -260,9 +251,6 @@ static inline void kasan_poison_pages(st bool init) {}static inline void kasan_unpoison_pages (struct page *page,unsigned int order,bool init) {} -static inline void kasan_cache_create (struct kmem_cache *cache, -unsigned int *size, -slab_flags_t *flags) {}static inline void kasan_cache_create_kmalloc (struct kmem_cache *cache) {}static inline void kasan_poison_slab (struct slab *slab) {} static inline void kasan_unpoison_object_data(struct kmem_cache *cache,
@@ -316,6 +304,8 @@ static inline void kasan_unpoison_task_ssize_t kasan_metadata_size (struct kmem_cache *cache);slab_flags_t kasan_never_merge (void ); +void kasan_cache_create (struct kmem_cache *cache,unsigned int *size, +slab_flags_t *flags);void kasan_cache_shrink (struct kmem_cache *cache);void kasan_cache_shutdown (struct kmem_cache *cache);
@@ -334,6 +324,10 @@ static inline slab_flags_t kasan_never_m {return 0 ; } +/* And no cache-related metadata initialization is required. */ +static inline void kasan_cache_create (struct kmem_cache *cache, +unsigned int *size, +slab_flags_t *flags) {}static inline void kasan_cache_shrink (struct kmem_cache *cache) {}static inline void kasan_cache_shutdown (struct kmem_cache *cache) {}
include/linux/slab.h renamed from include/linux/slab.h~kasan-only-define-kasan_cache_create-for-generic-mode +1 -1
@@ -106,7 +106,7 @@# define SLAB_ACCOUNT 0#endif -#ifdef CONFIG_KASAN +#ifdef CONFIG_KASAN_GENERIC #define SLAB_KASAN ((slab_flags_t __force)0x08000000U)#else #define SLAB_KASAN 0
mm/kasan/common.c renamed from mm/kasan/common.c~kasan-only-define-kasan_cache_create-for-generic-mode +0 -16
@@ -110,22 +110,6 @@ void __kasan_poison_pages(struct page *p KASAN_PAGE_FREE, init); } -void __kasan_cache_create (struct kmem_cache *cache,unsigned int *size, -slab_flags_t *flags) -{ -/* -* SLAB_KASAN is used to mark caches as ones that are sanitized by -* KASAN. Currently this flag is used in two places: -* 1. In slab_ksize() when calculating the size of the accessible -* memory within the object. -* 2. In slab_common.c to prevent merging of sanitized caches. -*/ - *flags |=SLAB_KASAN ; - -if (kasan_requires_meta ()) -kasan_init_cache_meta (cache, size); -} -void __kasan_cache_create_kmalloc (struct kmem_cache *cache) { cache->kasan_info.is_kmalloc = true;
mm/kasan/generic.c renamed from mm/kasan/generic.c~kasan-only-define-kasan_cache_create-for-generic-mode +16 -1
@@ -352,11 +352,26 @@ static inline unsigned int optimal_redzo object_size <= (1 <<16 ) -1024 ?1024 :2048 ; } -void kasan_init_cache_meta (struct kmem_cache *cache,unsigned int *size) +void kasan_cache_create (struct kmem_cache *cache,unsigned int *size, +slab_flags_t *flags) {unsigned int ok_size;unsigned int optimal_size; +if (!kasan_requires_meta ()) +return ; + +/* +* SLAB_KASAN is used to mark caches that are sanitized by KASAN +* and that thus have per-object metadata. +* Currently this flag is used in two places: +* 1. In slab_ksize() to account for per-object metadata when +* calculating the size of the accessible memory within the object. +* 2. In slab_common.c via kasan_never_merge() to prevent merging of +* caches with per-object metadata. +*/ + *flags |=SLAB_KASAN ; + ok_size = *size;/* Add alloc meta into redzone. */
_
Patches currently in -mm which might be from [email protected] are
kasan-fix-array-bounds-warnings-in-tests.patch