Skip to content

Commit

Permalink
lib/test_min_heap: use inline min heap variants to reduce attack vector
Browse files Browse the repository at this point in the history
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/[email protected]
Signed-off-by: Kuan-Wei Chiu <[email protected]>
Suggested-by: Geert Uytterhoeven <[email protected]>
Cc: Ching-Chun (Jim) Huang <[email protected]>
Cc: Jonathan Corbet <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
  • Loading branch information
visitorckw authored and akpm00 committed Jan 13, 2025
1 parent ec01e9d commit 93aa1b5
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 16 deletions.
1 change: 0 additions & 1 deletion lib/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -2269,7 +2269,6 @@ config TEST_LIST_SORT
config TEST_MIN_HEAP
tristate "Min heap test"
depends on DEBUG_KERNEL || m
select MIN_HEAP
help
Enable this to turn on min heap function tests. This test is
executed only once during system boot (so affects only boot time),
Expand Down
30 changes: 15 additions & 15 deletions lib/test_min_heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ static __init int pop_verify_heap(bool min_heap,
int last;

last = values[0];
min_heap_pop(heap, funcs, NULL);
min_heap_pop_inline(heap, funcs, NULL);
while (heap->nr > 0) {
if (min_heap) {
if (last > values[0]) {
Expand All @@ -48,7 +48,7 @@ static __init int pop_verify_heap(bool min_heap,
}
}
last = values[0];
min_heap_pop(heap, funcs, NULL);
min_heap_pop_inline(heap, funcs, NULL);
}
return err;
}
Expand All @@ -69,7 +69,7 @@ static __init int test_heapify_all(bool min_heap)
int i, err;

/* 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);


Expand All @@ -78,7 +78,7 @@ static __init int test_heapify_all(bool min_heap)
for (i = 0; i < heap.nr; i++)
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);

return err;
Expand All @@ -102,14 +102,14 @@ static __init int test_heap_push(bool min_heap)

/* Test with known set of values copied from data. */
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);

/* Test with randomly generated values. */
while (heap.nr < heap.size) {
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);

Expand All @@ -135,22 +135,22 @@ static __init int test_heap_pop_push(bool min_heap)
/* Fill values with data to pop and replace. */
temp = min_heap ? 0x80000000 : 0x7FFFFFFF;
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. */
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);

heap.nr = 0;
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. */
for (i = 0; i < ARRAY_SIZE(data); i++) {
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);

Expand All @@ -163,7 +163,7 @@ static __init int test_heap_del(bool min_heap)
-3, -1, -2, -4, 0x8000000, 0x7FFFFFF };
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);
struct min_heap_callbacks funcs = {
.less = min_heap ? less_than : greater_than,
Expand All @@ -172,20 +172,20 @@ static __init int test_heap_del(bool min_heap)
int i, err;

/* 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++)
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);


/* Test with randomly generated values. */
heap.nr = ARRAY_SIZE(values);
for (i = 0; i < heap.nr; i++)
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++)
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);

return err;
Expand Down

0 comments on commit 93aa1b5

Please sign in to comment.