Testcase test_next_pointer in slub_kunit fails when SLAB_RED_ZONE flag is globally set. This is because on_freelist() cuts corrupted freelist chain and does not update cut objects' redzone to SLUB_RED_ACTIVE. When the test validates a slab that whose freelist is cut, it expects redzone of objects unreachable by freelist is set to SLUB_RED_ACTIVE. And it reports "Left Redzone overritten" error because the expectation failed. This patch makes slub_kunit expect two more errors for reporting and fixing red overwritten error when SLAB_RED_ZONE flag is set. The test passes on slub_debug and slub_debug=Z after this patch. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx> --- lib/slub_kunit.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/slub_kunit.c b/lib/slub_kunit.c index 8662dc6cb509..7cf1fb5a7fde 100644 --- a/lib/slub_kunit.c +++ b/lib/slub_kunit.c @@ -45,21 +45,36 @@ static void test_next_pointer(struct kunit *test) * Expecting three errors. * One for the corrupted freechain and the other one for the wrong * count of objects in use. The third error is fixing broken cache. + * + * When flag SLUB_RED_ZONE is set, we expect two more errors for reporting + * and fixing overwritten redzone error. This two errors are detected + * because SLUB cuts corrupted freelist in on_freelist(), but does not + * update its redzone to SLUB_RED_ACTIVE. */ validate_slab_cache(s); - KUNIT_EXPECT_EQ(test, 3, slab_errors); + + if (s->flags & SLAB_RED_ZONE) + KUNIT_EXPECT_EQ(test, 5, slab_errors); + else + KUNIT_EXPECT_EQ(test, 3, slab_errors); /* * Try to repair corrupted freepointer. * Still expecting two errors. The first for the wrong count * of objects in use. * The second error is for fixing broken cache. + * + * When SLUB_RED_ZONE flag is set, we expect two more errors + * for same reason as above. */ *ptr_addr = tmp; slab_errors = 0; validate_slab_cache(s); - KUNIT_EXPECT_EQ(test, 2, slab_errors); + if (s->flags & SLAB_RED_ZONE) + KUNIT_EXPECT_EQ(test, 4, slab_errors); + else + KUNIT_EXPECT_EQ(test, 2, slab_errors); /* * Previous validation repaired the count of objects in use. -- 2.33.1