On Fri, Sep 25, 2020 at 12:50AM +0200, Andrey Konovalov wrote: > This is a preparatory commit for the upcoming addition of a new hardware > tag-based (MTE-based) KASAN mode. > > Group shadow-related KASAN function declarations and only define them > for the two existing software modes. > > No functional changes for software modes. > > Signed-off-by: Andrey Konovalov <andreyknvl@xxxxxxxxxx> > Signed-off-by: Vincenzo Frascino <vincenzo.frascino@xxxxxxx> Reviewed-by: Marco Elver <elver@xxxxxxxxxx> > --- > Change-Id: I864be75a88b91b443c55e9c2042865e15703e164 > --- > include/linux/kasan.h | 44 ++++++++++++++++++++++++++----------------- > 1 file changed, 27 insertions(+), 17 deletions(-) > > diff --git a/include/linux/kasan.h b/include/linux/kasan.h > index bd5b4965a269..44a9aae44138 100644 > --- a/include/linux/kasan.h > +++ b/include/linux/kasan.h > @@ -3,16 +3,24 @@ > #define _LINUX_KASAN_H > > #include <linux/types.h> > +#include <asm/kasan.h> > > struct kmem_cache; > struct page; > struct vm_struct; > struct task_struct; > > -#ifdef CONFIG_KASAN > +#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS) > > #include <linux/pgtable.h> > -#include <asm/kasan.h> > + > +/* Software KASAN implementations use shadow memory. */ > + > +#ifdef CONFIG_KASAN_SW_TAGS > +#define KASAN_SHADOW_INIT 0xFF > +#else > +#define KASAN_SHADOW_INIT 0 > +#endif > > extern unsigned char kasan_early_shadow_page[PAGE_SIZE]; > extern pte_t kasan_early_shadow_pte[PTRS_PER_PTE]; > @@ -29,6 +37,23 @@ static inline void *kasan_mem_to_shadow(const void *addr) > + KASAN_SHADOW_OFFSET; > } > > +int kasan_add_zero_shadow(void *start, unsigned long size); > +void kasan_remove_zero_shadow(void *start, unsigned long size); > + > +#else /* CONFIG_KASAN_GENERIC || CONFIG_KASAN_SW_TAGS */ > + > +static inline int kasan_add_zero_shadow(void *start, unsigned long size) > +{ > + return 0; > +} > +static inline void kasan_remove_zero_shadow(void *start, > + unsigned long size) > +{} > + > +#endif /* CONFIG_KASAN_GENERIC || CONFIG_KASAN_SW_TAGS */ > + > +#ifdef CONFIG_KASAN > + > /* Enable reporting bugs after kasan_disable_current() */ > extern void kasan_enable_current(void); > > @@ -69,9 +94,6 @@ struct kasan_cache { > int free_meta_offset; > }; > > -int kasan_add_zero_shadow(void *start, unsigned long size); > -void kasan_remove_zero_shadow(void *start, unsigned long size); > - > size_t __ksize(const void *); > static inline void kasan_unpoison_slab(const void *ptr) > { > @@ -137,14 +159,6 @@ static inline bool kasan_slab_free(struct kmem_cache *s, void *object, > return false; > } > > -static inline int kasan_add_zero_shadow(void *start, unsigned long size) > -{ > - return 0; > -} > -static inline void kasan_remove_zero_shadow(void *start, > - unsigned long size) > -{} > - > static inline void kasan_unpoison_slab(const void *ptr) { } > static inline size_t kasan_metadata_size(struct kmem_cache *cache) { return 0; } > > @@ -152,8 +166,6 @@ static inline size_t kasan_metadata_size(struct kmem_cache *cache) { return 0; } > > #ifdef CONFIG_KASAN_GENERIC > > -#define KASAN_SHADOW_INIT 0 > - > void kasan_cache_shrink(struct kmem_cache *cache); > void kasan_cache_shutdown(struct kmem_cache *cache); > void kasan_record_aux_stack(void *ptr); > @@ -168,8 +180,6 @@ static inline void kasan_record_aux_stack(void *ptr) {} > > #ifdef CONFIG_KASAN_SW_TAGS > > -#define KASAN_SHADOW_INIT 0xFF > - > void kasan_init_tags(void); > > void *kasan_reset_tag(const void *addr); > -- > 2.28.0.681.g6f77f65b4e-goog >