On Wed, May 12, 2021 at 07:52:27PM -0700, Andrew Morton wrote: > This explodes in mysterious ways. The patch as I have it is appended, > for reference. > > gcc-10.3.0 allmodconfig. > > This patch suppresses the error: > > --- a/mm/kfence/kfence_test.c~a > +++ a/mm/kfence/kfence_test.c > @@ -318,13 +318,13 @@ static void test_out_of_bounds_read(stru > > /* Test both sides. */ > > - buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT); > + buf = test_alloc(test, 32, GFP_KERNEL, ALLOCATE_LEFT); > expect.addr = buf - 1; > READ_ONCE(*expect.addr); > KUNIT_EXPECT_TRUE(test, report_matches(&expect)); > test_free(buf); > > - buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT); > + buf = test_alloc(test, 32, GFP_KERNEL, ALLOCATE_RIGHT); > expect.addr = buf + size; > READ_ONCE(*expect.addr); > KUNIT_EXPECT_TRUE(test, report_matches(&expect)); > @@ -519,11 +519,11 @@ static void test_free_bulk(struct kunit > const size_t size = setup_test_cache(test, 8 + prandom_u32_max(300), 0, > (iter & 1) ? ctor_set_x : NULL); > void *objects[] = { > - test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT), > - test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE), > - test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT), > - test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE), > - test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE), > + test_alloc(test, 32, GFP_KERNEL, ALLOCATE_RIGHT), > + test_alloc(test, 32, GFP_KERNEL, ALLOCATE_NONE), > + test_alloc(test, 32, GFP_KERNEL, ALLOCATE_LEFT), > + test_alloc(test, 32, GFP_KERNEL, ALLOCATE_NONE), > + test_alloc(test, 32, GFP_KERNEL, ALLOCATE_NONE), > }; > > kmem_cache_free_bulk(test_cache, ARRAY_SIZE(objects), objects); > > > Is gcc-10.3.0 simply confused? test_out_of_bounds_read() is clearly > calling kmalloc_index(32) which is OK. > > Anyway, I'll drop this patch for now so I can compile a kernel! > The error messages isn't so clear to me. but one problem I can see is in kfence_test.c, there are many places that are using size which is not constant. in kmalloc if size is not constant, it calls dummy function __kmalloc which does not make use of size.