UPSTREAM: kasan: test: prevent cache merging in kmem_cache_double_destroy
With HW_TAGS KASAN and kasan.stacktrace=off, the cache created in the kmem_cache_double_destroy() test might get merged with an existing one. Thus, the first kmem_cache_destroy() call won't actually destroy it but will only decrease the refcount. This causes the test to fail. Provide an empty constructor for the created cache to prevent the cache from getting merged. Bug: 254441685 Link: https://lkml.kernel.org/r/b597bd434c49591d8af00ee3993a42c609dc9a59.1644346040.git.andreyknvl@google.com Fixes: f98f966cd750 ("kasan: test: add test case for double-kmem_cache_destroy()") Signed-off-by: Andrey Konovalov <andreyknvl@google.com> Reviewed-by: Marco Elver <elver@google.com> Cc: Alexander Potapenko <glider@google.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> (cherry picked from commit 70effdc3756c924f4a2b6af1ec4e2e92e18e1b45) Signed-off-by: Lee Jones <joneslee@google.com> Change-Id: Ia108a532291f6d20fdf24115a930f1a79086dfad
This commit is contained in:
committed by
Lee Jones
parent
435eac40de
commit
bc920538bb
@@ -885,11 +885,14 @@ static void kmem_cache_invalid_free(struct kunit *test)
|
||||
kmem_cache_destroy(cache);
|
||||
}
|
||||
|
||||
static void empty_cache_ctor(void *object) { }
|
||||
|
||||
static void kmem_cache_double_destroy(struct kunit *test)
|
||||
{
|
||||
struct kmem_cache *cache;
|
||||
|
||||
cache = kmem_cache_create("test_cache", 200, 0, 0, NULL);
|
||||
/* Provide a constructor to prevent cache merging. */
|
||||
cache = kmem_cache_create("test_cache", 200, 0, 0, empty_cache_ctor);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache);
|
||||
kmem_cache_destroy(cache);
|
||||
KUNIT_EXPECT_KASAN_FAIL(test, kmem_cache_destroy(cache));
|
||||
|
||||
Reference in New Issue
Block a user