On Wed, Jan 13, 2021 at 5:38 PM Marco Elver <elver@xxxxxxxxxx> wrote: > > On Wed, 13 Jan 2021 at 17:22, Andrey Konovalov <andreyknvl@xxxxxxxxxx> wrote: > > > > Add a test for kmem_cache_alloc/free_bulk to make sure there are now > > false-positives when these functions are used. > > s/now/no/ (but by itself doesn't necessarily demand a v3) > > > Link: https://linux-review.googlesource.com/id/I2a8bf797aecf81baeac61380c567308f319e263d > > Signed-off-by: Andrey Konovalov <andreyknvl@xxxxxxxxxx> > > --- > > lib/test_kasan.c | 39 ++++++++++++++++++++++++++++++++++----- > > 1 file changed, 34 insertions(+), 5 deletions(-) > > > > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > > index 5e3d054e5b8c..d9f9a93922d5 100644 > > --- a/lib/test_kasan.c > > +++ b/lib/test_kasan.c > > @@ -479,10 +479,11 @@ static void kmem_cache_oob(struct kunit *test) > > { > > char *p; > > size_t size = 200; > > - struct kmem_cache *cache = kmem_cache_create("test_cache", > > - size, 0, > > - 0, NULL); > > + struct kmem_cache *cache; > > + > > + cache = kmem_cache_create("test_cache", size, 0, 0, NULL); > > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); > > + > > p = kmem_cache_alloc(cache, GFP_KERNEL); > > if (!p) { > > kunit_err(test, "Allocation failed: %s\n", __func__); > > @@ -491,11 +492,12 @@ static void kmem_cache_oob(struct kunit *test) > > } > > > > KUNIT_EXPECT_KASAN_FAIL(test, *p = p[size + OOB_TAG_OFF]); > > + > > kmem_cache_free(cache, p); > > kmem_cache_destroy(cache); > > } > > > > -static void memcg_accounted_kmem_cache(struct kunit *test) > > +static void kmem_cache_accounted(struct kunit *test) > > { > > int i; > > char *p; > > @@ -522,6 +524,32 @@ static void memcg_accounted_kmem_cache(struct kunit *test) > > kmem_cache_destroy(cache); > > } > > > > +static void kmem_cache_bulk(struct kunit *test) > > +{ > > + struct kmem_cache *cache; > > + size_t size = 200; > > + size_t p_size = 10; > > s/p_size/ARRAY_SIZE(p)/ > ? > > > + char *p[10]; > > + bool ret; > > + int i; > > + > > + cache = kmem_cache_create("test_cache", size, 0, 0, NULL); > > + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); > > + > > + ret = kmem_cache_alloc_bulk(cache, GFP_KERNEL, p_size, (void **)&p); > > + if (!ret) { > > + kunit_err(test, "Allocation failed: %s\n", __func__); > > + kmem_cache_destroy(cache); > > + return; > > + } > > + > > + for (i = 0; i < p_size; i++) > > + p[i][0] = p[i][size - 1] = 42; > > + > > + kmem_cache_free_bulk(cache, p_size, (void **)&p); > > + kmem_cache_destroy(cache); > > +} > > + > > static char global_array[10]; > > > > static void kasan_global_oob(struct kunit *test) > > @@ -961,7 +989,8 @@ static struct kunit_case kasan_kunit_test_cases[] = { > > KUNIT_CASE(kfree_via_page), > > KUNIT_CASE(kfree_via_phys), > > KUNIT_CASE(kmem_cache_oob), > > - KUNIT_CASE(memcg_accounted_kmem_cache), > > + KUNIT_CASE(kmem_cache_accounted), > > + KUNIT_CASE(kmem_cache_bulk), > > KUNIT_CASE(kasan_global_oob), > > KUNIT_CASE(kasan_stack_oob), > > KUNIT_CASE(kasan_alloca_oob_left), > > -- > > 2.30.0.284.gd98b1dd5eaa7-goog > > Will fix all in v3, thanks!