mm: kasan: Extend kasan_metadata_size() to also cover in-object size
authorFeng Tang <feng.tang@intel.com>
Fri, 21 Oct 2022 03:24:04 +0000 (11:24 +0800)
committerVlastimil Babka <vbabka@suse.cz>
Thu, 10 Nov 2022 15:27:46 +0000 (16:27 +0100)
commit5d1ba31087627423dfb2bd87badd62361701997b
tree30115b55a761164a8b64a1e1fdbdef8842ef8ada
parent9ce67395f5a0cdec6ce152d26bfda13b98b25c01
mm: kasan: Extend kasan_metadata_size() to also cover in-object size

When kasan is enabled for slab/slub, it may save kasan' free_meta
data in the former part of slab object data area in slab object's
free path, which works fine.

There is ongoing effort to extend slub's debug function which will
redzone the latter part of kmalloc object area, and when both of
the debug are enabled, there is possible conflict, especially when
the kmalloc object has small size, as caught by 0Day bot [1].

To solve it, slub code needs to know the in-object kasan's meta
data size. Currently, there is existing kasan_metadata_size()
which returns the kasan's metadata size inside slub's metadata
area, so extend it to also cover the in-object meta size by
adding a boolean flag 'in_object'.

There is no functional change to existing code logic.

[1]. https://lore.kernel.org/lkml/YuYm3dWwpZwH58Hu@xsang-OptiPlex-9020/

Reported-by: kernel test robot <oliver.sang@intel.com>
Suggested-by: Andrey Konovalov <andreyknvl@gmail.com>
Signed-off-by: Feng Tang <feng.tang@intel.com>
Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com>
Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
include/linux/kasan.h
mm/kasan/generic.c
mm/slub.c