diff options
author | Jann Horn <jannh@google.com> | 2024-08-09 17:36:55 +0200 |
---|---|---|
committer | Vlastimil Babka <vbabka@suse.cz> | 2024-08-27 14:12:51 +0200 |
commit | b3c34245756adada8a50bdaedbb3965b071c7b0a (patch) | |
tree | 8b6cff494f8b7bbd9c5698f43393644df1ae6710 /mm/slab_common.c | |
parent | kunit, slub: add test_kfree_rcu() and test_leak_destroy() (diff) | |
download | linux-b3c34245756adada8a50bdaedbb3965b071c7b0a.tar.xz linux-b3c34245756adada8a50bdaedbb3965b071c7b0a.zip |
kasan: catch invalid free before SLUB reinitializes the object
Currently, when KASAN is combined with init-on-free behavior, the
initialization happens before KASAN's "invalid free" checks.
More importantly, a subsequent commit will want to RCU-delay the actual
SLUB freeing of an object, and we'd like KASAN to still validate
synchronously that freeing the object is permitted. (Otherwise this
change will make the existing testcase kmem_cache_invalid_free fail.)
So add a new KASAN hook that allows KASAN to pre-validate a
kmem_cache_free() operation before SLUB actually starts modifying the
object or its metadata.
Inside KASAN, this:
- moves checks from poison_slab_object() into check_slab_allocation()
- moves kasan_arch_is_ready() up into callers of poison_slab_object()
- removes "ip" argument of poison_slab_object() and __kasan_slab_free()
(since those functions no longer do any reporting)
Acked-by: Vlastimil Babka <vbabka@suse.cz> #slub
Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com>
Signed-off-by: Jann Horn <jannh@google.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Diffstat (limited to 'mm/slab_common.c')
0 files changed, 0 insertions, 0 deletions