Messages in this thread | | | Date | Wed, 11 Nov 2020 20:17:31 +0100 | From | Marco Elver <> | Subject | Re: [PATCH v2 16/20] kasan: simplify assign_tag and set_tag calls |
| |
On Tue, Nov 10, 2020 at 11:20PM +0100, Andrey Konovalov wrote: > set_tag() already ignores the tag for the generic mode, so just call it > as is. Add a check for the generic mode to assign_tag(), and simplify its > call in ____kasan_kmalloc(). > > Signed-off-by: Andrey Konovalov <andreyknvl@google.com> > Reviewed-by: Dmitry Vyukov <dvyukov@google.com> > Link: https://linux-review.googlesource.com/id/I18905ca78fb4a3d60e1a34a4ca00247272480438 > --- > mm/kasan/common.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-)
Reviewed-by: Marco Elver <elver@google.com>
> diff --git a/mm/kasan/common.c b/mm/kasan/common.c > index 69ab880abacc..40ff3ce07a76 100644 > --- a/mm/kasan/common.c > +++ b/mm/kasan/common.c > @@ -238,6 +238,9 @@ void __kasan_poison_object_data(struct kmem_cache *cache, void *object) > static u8 assign_tag(struct kmem_cache *cache, const void *object, > bool init, bool keep_tag) > { > + if (IS_ENABLED(CONFIG_KASAN_GENERIC)) > + return 0xff; > +
Hopefully the compiler is clever enough to start inlining this function.
> /* > * 1. When an object is kmalloc()'ed, two hooks are called: > * kasan_slab_alloc() and kasan_kmalloc(). We assign the > @@ -280,8 +283,8 @@ void * __must_check __kasan_init_slab_obj(struct kmem_cache *cache, > __memset(alloc_meta, 0, sizeof(*alloc_meta)); > } > > - if (IS_ENABLED(CONFIG_KASAN_SW_TAGS) || IS_ENABLED(CONFIG_KASAN_HW_TAGS)) > - object = set_tag(object, assign_tag(cache, object, true, false)); > + /* Tag is ignored in set_tag() without CONFIG_KASAN_SW/HW_TAGS */ > + object = set_tag(object, assign_tag(cache, object, true, false)); > > return (void *)object; > } > @@ -362,9 +365,7 @@ static void *____kasan_kmalloc(struct kmem_cache *cache, const void *object, > KASAN_GRANULE_SIZE); > redzone_end = round_up((unsigned long)object + cache->object_size, > KASAN_GRANULE_SIZE); > - > - if (IS_ENABLED(CONFIG_KASAN_SW_TAGS) || IS_ENABLED(CONFIG_KASAN_HW_TAGS)) > - tag = assign_tag(cache, object, false, keep_tag); > + tag = assign_tag(cache, object, false, keep_tag); >
The definition of 'tag' at the start of ____kasan_kmalloc() no longer needs an initializer.
> /* Tag is ignored in set_tag without CONFIG_KASAN_SW/HW_TAGS */ > kasan_unpoison_memory(set_tag(object, tag), size);
| |