On Wed, Oct 15, 2025 at 04:42:47PM +0200, Petr Vorel wrote:
The overcommit test uses sum_total, the sum (memory and swap) to test the overcommit settings.
This fixes two problems on 32-bit systems. The first is seen with a integer overflow can occur when calculating sum_total * 2, if the sum_total is larger than 2GB. The second is limited virtual address
You still mention GB ...
Yep. It is GB.
space (2-3GB) means the test can fail from address space exhaustion before overcommit has been tested.
Now the test runs correctly on low-memory 32-bit systems while avoiding both the overflow bug and virtual address space issues.
Signed-off-by: Ben Copeland ben.copeland@linaro.org Acked-by: Arnd Bergmann arnd@arndb.de Reviewed-by: Petr Vorel pvorel@suse.cz
.../kernel/mem/tunable/overcommit_memory.c | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-)
diff --git a/testcases/kernel/mem/tunable/overcommit_memory.c b/testcases/kernel/mem/tunable/overcommit_memory.c index 9b2cb479d..7ff5a98d0 100644 --- a/testcases/kernel/mem/tunable/overcommit_memory.c +++ b/testcases/kernel/mem/tunable/overcommit_memory.c @@ -131,24 +131,45 @@ static void overcommit_memory_test(void) TST_SYS_CONF_LONG_SET(OVERCOMMIT_MEMORY, 2, 1);
update_mem_commit();
- alloc_and_check(commit_left * 2, EXPECT_FAIL);
- alloc_and_check(commit_limit + total_batch_size, EXPECT_FAIL);
- /* Skip tests that would overflow or exceed 32-bit address space */
- if (tst_kernel_bits() == 64 || (unsigned long)commit_left <= TST_GB / TST_KB) {
... but TST_GB / TST_KB is actually MB (you could use TST_MB).
The sizes in this test are measured in KB, so it's 1GB but measured in terms of KB not bytes. Using TST_MB would work mathematically but it's misleading.
regards, dan carpenter