Thread (29 messages) 29 messages, 5 authors, 2021-05-19

Re: [PATCH v3] mm, slub: change run-time assertion in kmalloc_index() to compile-time

From: Hyeonggon Yoo <hidden>
Date: 2021-05-13 03:12:29
Also in: lkml

On Wed, May 12, 2021 at 07:52:27PM -0700, Andrew Morton wrote:
quoted hunk ↗ jump to hunk
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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help