Message ID | b75320408b90f18e369a464c446b6969c2afb06c.1610652890.git.andreyknvl@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | kasan: HW_TAGS tests support and fixes | expand |
On Thu, Jan 14, 2021 at 08:36PM +0100, Andrey Konovalov wrote: > Add a test for kmem_cache_alloc/free_bulk to make sure there are no > false-positives when these functions are used. > > Link: https://linux-review.googlesource.com/id/I2a8bf797aecf81baeac61380c567308f319e263d > Signed-off-by: Andrey Konovalov <andreyknvl@google.com> Reviewed-by: Marco Elver <elver@google.com> > --- > lib/test_kasan.c | 38 +++++++++++++++++++++++++++++++++----- > 1 file changed, 33 insertions(+), 5 deletions(-) > > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > index ab22a653762e..a96376aa7293 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,31 @@ 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; > + 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, ARRAY_SIZE(p), (void **)&p); > + if (!ret) { > + kunit_err(test, "Allocation failed: %s\n", __func__); > + kmem_cache_destroy(cache); > + return; > + } > + > + for (i = 0; i < ARRAY_SIZE(p); i++) > + p[i][0] = p[i][size - 1] = 42; > + > + kmem_cache_free_bulk(cache, ARRAY_SIZE(p), (void **)&p); > + kmem_cache_destroy(cache); > +} > + > static char global_array[10]; > > static void kasan_global_oob(struct kunit *test) > @@ -961,7 +988,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 >
On Fri, Jan 15, 2021 at 2:16 PM Marco Elver <elver@google.com> wrote: > > On Thu, Jan 14, 2021 at 08:36PM +0100, Andrey Konovalov wrote: > > Add a test for kmem_cache_alloc/free_bulk to make sure there are no > > false-positives when these functions are used. > > > > Link: https://linux-review.googlesource.com/id/I2a8bf797aecf81baeac61380c567308f319e263d > > Signed-off-by: Andrey Konovalov <andreyknvl@google.com> > > Reviewed-by: Marco Elver <elver@google.com> Reviewed-by: Alexander Potapenko <glider@google.com> (see a nit below) > > + cache = kmem_cache_create("test_cache", size, 0, 0, NULL); Looks like there's a tab between "test_cache" and size, please double-check.
On Fri, Jan 15, 2021 at 2:49 PM Alexander Potapenko <glider@google.com> wrote: > > On Fri, Jan 15, 2021 at 2:16 PM Marco Elver <elver@google.com> wrote: > > > > On Thu, Jan 14, 2021 at 08:36PM +0100, Andrey Konovalov wrote: > > > Add a test for kmem_cache_alloc/free_bulk to make sure there are no > > > false-positives when these functions are used. > > > > > > Link: https://linux-review.googlesource.com/id/I2a8bf797aecf81baeac61380c567308f319e263d > > > Signed-off-by: Andrey Konovalov <andreyknvl@google.com> > > > > Reviewed-by: Marco Elver <elver@google.com> > Reviewed-by: Alexander Potapenko <glider@google.com> > > (see a nit below) > > > > + cache = kmem_cache_create("test_cache", size, 0, 0, NULL); > Looks like there's a tab between "test_cache" and size, please double-check. Indeed, thanks for noticing! Will fix.
diff --git a/lib/test_kasan.c b/lib/test_kasan.c index ab22a653762e..a96376aa7293 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,31 @@ 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; + 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, ARRAY_SIZE(p), (void **)&p); + if (!ret) { + kunit_err(test, "Allocation failed: %s\n", __func__); + kmem_cache_destroy(cache); + return; + } + + for (i = 0; i < ARRAY_SIZE(p); i++) + p[i][0] = p[i][size - 1] = 42; + + kmem_cache_free_bulk(cache, ARRAY_SIZE(p), (void **)&p); + kmem_cache_destroy(cache); +} + static char global_array[10]; static void kasan_global_oob(struct kunit *test) @@ -961,7 +988,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),
Add a test for kmem_cache_alloc/free_bulk to make sure there are no false-positives when these functions are used. Link: https://linux-review.googlesource.com/id/I2a8bf797aecf81baeac61380c567308f319e263d Signed-off-by: Andrey Konovalov <andreyknvl@google.com> --- lib/test_kasan.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-)