Message ID | 748bd5e0bad5266a4cac52ff25232bbc314b24f5.1644345308.git.andreyknvl@google.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | kasan: test: prevent cache merging in kmem_cache_double_destroy | expand |
On Tue, 8 Feb 2022 at 19:37, <andrey.konovalov@linux.dev> wrote: > > From: Andrey Konovalov <andreyknvl@google.com> > > 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 descrease the refcount. This causes the test to fail. s/descrease/decrease/ > Provide an empty contructor for the created cache to prevent the cache s/contructor/constructor/ > from getting merged. > > 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> > --- > lib/test_kasan.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > index 26a5c9007653..3b413f8c8a71 100644 > --- a/lib/test_kasan.c > +++ b/lib/test_kasan.c > @@ -869,11 +869,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)); > -- > 2.25.1 >
diff --git a/lib/test_kasan.c b/lib/test_kasan.c index 26a5c9007653..3b413f8c8a71 100644 --- a/lib/test_kasan.c +++ b/lib/test_kasan.c @@ -869,11 +869,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));