lib/test_min_heap: use inline min heap variants to reduce attack vector

To address concerns about increasing the attack vector, remove the select
MIN_HEAP dependency from TEST_MIN_HEAP in Kconfig.debug.

Additionally, all min heap test function calls in lib/test_min_heap.c are
replaced with their inline variants.  By exclusively using inline
variants, we eliminate the need to enable CONFIG_MIN_HEAP for testing
purposes.

Link: https://lore.kernel.org/lkml/CAMuHMdVO5DPuD9HYWBFqKDHphx7+0BEhreUxtVC40A=8p6VAhQ@mail.gmail.com
Link: https://lkml.kernel.org/r/20241129181222.646855-3-visitorckw@gmail.com
Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ching-Chun (Jim) Huang <jserv@ccns.ncku.edu.tw>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Kuan-Wei Chiu 2024-11-30 02:12:20 +08:00 committed by Andrew Morton
parent e6f19ab8e4
commit 9340173a8a
2 changed files with 15 additions and 16 deletions

View File

@ -2269,7 +2269,6 @@ config TEST_LIST_SORT
config TEST_MIN_HEAP config TEST_MIN_HEAP
tristate "Min heap test" tristate "Min heap test"
depends on DEBUG_KERNEL || m depends on DEBUG_KERNEL || m
select MIN_HEAP
help help
Enable this to turn on min heap function tests. This test is Enable this to turn on min heap function tests. This test is
executed only once during system boot (so affects only boot time), executed only once during system boot (so affects only boot time),

View File

@ -32,7 +32,7 @@ static __init int pop_verify_heap(bool min_heap,
int last; int last;
last = values[0]; last = values[0];
min_heap_pop(heap, funcs, NULL); min_heap_pop_inline(heap, funcs, NULL);
while (heap->nr > 0) { while (heap->nr > 0) {
if (min_heap) { if (min_heap) {
if (last > values[0]) { if (last > values[0]) {
@ -48,7 +48,7 @@ static __init int pop_verify_heap(bool min_heap,
} }
} }
last = values[0]; last = values[0];
min_heap_pop(heap, funcs, NULL); min_heap_pop_inline(heap, funcs, NULL);
} }
return err; return err;
} }
@ -69,7 +69,7 @@ static __init int test_heapify_all(bool min_heap)
int i, err; int i, err;
/* Test with known set of values. */ /* Test with known set of values. */
min_heapify_all(&heap, &funcs, NULL); min_heapify_all_inline(&heap, &funcs, NULL);
err = pop_verify_heap(min_heap, &heap, &funcs); err = pop_verify_heap(min_heap, &heap, &funcs);
@ -78,7 +78,7 @@ static __init int test_heapify_all(bool min_heap)
for (i = 0; i < heap.nr; i++) for (i = 0; i < heap.nr; i++)
values[i] = get_random_u32(); values[i] = get_random_u32();
min_heapify_all(&heap, &funcs, NULL); min_heapify_all_inline(&heap, &funcs, NULL);
err += pop_verify_heap(min_heap, &heap, &funcs); err += pop_verify_heap(min_heap, &heap, &funcs);
return err; return err;
@ -102,14 +102,14 @@ static __init int test_heap_push(bool min_heap)
/* Test with known set of values copied from data. */ /* Test with known set of values copied from data. */
for (i = 0; i < ARRAY_SIZE(data); i++) for (i = 0; i < ARRAY_SIZE(data); i++)
min_heap_push(&heap, &data[i], &funcs, NULL); min_heap_push_inline(&heap, &data[i], &funcs, NULL);
err = pop_verify_heap(min_heap, &heap, &funcs); err = pop_verify_heap(min_heap, &heap, &funcs);
/* Test with randomly generated values. */ /* Test with randomly generated values. */
while (heap.nr < heap.size) { while (heap.nr < heap.size) {
temp = get_random_u32(); temp = get_random_u32();
min_heap_push(&heap, &temp, &funcs, NULL); min_heap_push_inline(&heap, &temp, &funcs, NULL);
} }
err += pop_verify_heap(min_heap, &heap, &funcs); err += pop_verify_heap(min_heap, &heap, &funcs);
@ -135,22 +135,22 @@ static __init int test_heap_pop_push(bool min_heap)
/* Fill values with data to pop and replace. */ /* Fill values with data to pop and replace. */
temp = min_heap ? 0x80000000 : 0x7FFFFFFF; temp = min_heap ? 0x80000000 : 0x7FFFFFFF;
for (i = 0; i < ARRAY_SIZE(data); i++) for (i = 0; i < ARRAY_SIZE(data); i++)
min_heap_push(&heap, &temp, &funcs, NULL); min_heap_push_inline(&heap, &temp, &funcs, NULL);
/* Test with known set of values copied from data. */ /* Test with known set of values copied from data. */
for (i = 0; i < ARRAY_SIZE(data); i++) for (i = 0; i < ARRAY_SIZE(data); i++)
min_heap_pop_push(&heap, &data[i], &funcs, NULL); min_heap_pop_push_inline(&heap, &data[i], &funcs, NULL);
err = pop_verify_heap(min_heap, &heap, &funcs); err = pop_verify_heap(min_heap, &heap, &funcs);
heap.nr = 0; heap.nr = 0;
for (i = 0; i < ARRAY_SIZE(data); i++) for (i = 0; i < ARRAY_SIZE(data); i++)
min_heap_push(&heap, &temp, &funcs, NULL); min_heap_push_inline(&heap, &temp, &funcs, NULL);
/* Test with randomly generated values. */ /* Test with randomly generated values. */
for (i = 0; i < ARRAY_SIZE(data); i++) { for (i = 0; i < ARRAY_SIZE(data); i++) {
temp = get_random_u32(); temp = get_random_u32();
min_heap_pop_push(&heap, &temp, &funcs, NULL); min_heap_pop_push_inline(&heap, &temp, &funcs, NULL);
} }
err += pop_verify_heap(min_heap, &heap, &funcs); err += pop_verify_heap(min_heap, &heap, &funcs);
@ -163,7 +163,7 @@ static __init int test_heap_del(bool min_heap)
-3, -1, -2, -4, 0x8000000, 0x7FFFFFF }; -3, -1, -2, -4, 0x8000000, 0x7FFFFFF };
struct min_heap_test heap; struct min_heap_test heap;
min_heap_init(&heap, values, ARRAY_SIZE(values)); min_heap_init_inline(&heap, values, ARRAY_SIZE(values));
heap.nr = ARRAY_SIZE(values); heap.nr = ARRAY_SIZE(values);
struct min_heap_callbacks funcs = { struct min_heap_callbacks funcs = {
.less = min_heap ? less_than : greater_than, .less = min_heap ? less_than : greater_than,
@ -172,9 +172,9 @@ static __init int test_heap_del(bool min_heap)
int i, err; int i, err;
/* Test with known set of values. */ /* Test with known set of values. */
min_heapify_all(&heap, &funcs, NULL); min_heapify_all_inline(&heap, &funcs, NULL);
for (i = 0; i < ARRAY_SIZE(values) / 2; i++) for (i = 0; i < ARRAY_SIZE(values) / 2; i++)
min_heap_del(&heap, get_random_u32() % heap.nr, &funcs, NULL); min_heap_del_inline(&heap, get_random_u32() % heap.nr, &funcs, NULL);
err = pop_verify_heap(min_heap, &heap, &funcs); err = pop_verify_heap(min_heap, &heap, &funcs);
@ -182,10 +182,10 @@ static __init int test_heap_del(bool min_heap)
heap.nr = ARRAY_SIZE(values); heap.nr = ARRAY_SIZE(values);
for (i = 0; i < heap.nr; i++) for (i = 0; i < heap.nr; i++)
values[i] = get_random_u32(); values[i] = get_random_u32();
min_heapify_all(&heap, &funcs, NULL); min_heapify_all_inline(&heap, &funcs, NULL);
for (i = 0; i < ARRAY_SIZE(values) / 2; i++) for (i = 0; i < ARRAY_SIZE(values) / 2; i++)
min_heap_del(&heap, get_random_u32() % heap.nr, &funcs, NULL); min_heap_del_inline(&heap, get_random_u32() % heap.nr, &funcs, NULL);
err += pop_verify_heap(min_heap, &heap, &funcs); err += pop_verify_heap(min_heap, &heap, &funcs);
return err; return err;