Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/mm: use calloc instead of malloc in pagemap_ioctl.c

As per Documentation/process/deprecated.rst, dynamic size calculations
should not be performed in memory allocator arguments due to possible
overflows.

Replace malloc with calloc to avoid open-ended arithmetic and prevent
possible overflows.

Link: https://lkml.kernel.org/r/20250825170643.63174-1-viswanathiyyappan@gmail.com
Signed-off-by: I Viswanath <viswanathiyyappan@gmail.com>
Reviewed-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed by: Donet Tom <donettom@linux.ibm.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

I Viswanath and committed by
Andrew Morton
79dfed09 786eb990

+12 -12
+12 -12
tools/testing/selftests/mm/pagemap_ioctl.c
··· 209 209 wp_addr_range(mem, mem_size); 210 210 211 211 vec_size = mem_size/page_size; 212 - vec = malloc(sizeof(struct page_region) * vec_size); 212 + vec = calloc(vec_size, sizeof(struct page_region)); 213 213 214 214 written = pagemap_ioctl(mem, mem_size, vec, 1, PM_SCAN_WP_MATCHING | PM_SCAN_CHECK_WPASYNC, 215 215 vec_size - 2, PAGE_IS_WRITTEN, 0, 0, PAGE_IS_WRITTEN); ··· 247 247 vec_size = num_pages/2; 248 248 mem_size = num_pages * page_size; 249 249 250 - vec = malloc(sizeof(struct page_region) * vec_size); 250 + vec = calloc(vec_size, sizeof(struct page_region)); 251 251 if (!vec) 252 252 ksft_exit_fail_msg("error nomem\n"); 253 253 254 - vec2 = malloc(sizeof(struct page_region) * vec_size); 254 + vec2 = calloc(vec_size, sizeof(struct page_region)); 255 255 if (!vec2) 256 256 ksft_exit_fail_msg("error nomem\n"); 257 257 ··· 436 436 mem_size = 1050 * page_size; 437 437 vec_size = mem_size/(page_size*2); 438 438 439 - vec = malloc(sizeof(struct page_region) * vec_size); 439 + vec = calloc(vec_size, sizeof(struct page_region)); 440 440 if (!vec) 441 441 ksft_exit_fail_msg("error nomem\n"); 442 442 ··· 491 491 mem_size = 10000 * page_size; 492 492 vec_size = 50; 493 493 494 - vec = malloc(sizeof(struct page_region) * vec_size); 494 + vec = calloc(vec_size, sizeof(struct page_region)); 495 495 if (!vec) 496 496 ksft_exit_fail_msg("error nomem\n"); 497 497 ··· 541 541 vec_size = 1000; 542 542 mem_size = vec_size * page_size; 543 543 544 - vec = malloc(sizeof(struct page_region) * vec_size); 544 + vec = calloc(vec_size, sizeof(struct page_region)); 545 545 if (!vec) 546 546 ksft_exit_fail_msg("error nomem\n"); 547 547 ··· 695 695 } 696 696 697 697 vec_size = mem_size/page_size; 698 - vec = malloc(sizeof(struct page_region) * vec_size); 699 - vec2 = malloc(sizeof(struct page_region) * vec_size); 698 + vec = calloc(vec_size, sizeof(struct page_region)); 699 + vec2 = calloc(vec_size, sizeof(struct page_region)); 700 700 701 701 /* 1. all new pages must be not be written (dirty) */ 702 702 written = pagemap_ioctl(mem, mem_size, vec, 1, PM_SCAN_WP_MATCHING | PM_SCAN_CHECK_WPASYNC, ··· 807 807 unsigned long long vec_size = map_size/page_size; 808 808 struct page_region *vec, *vec2; 809 809 810 - vec = malloc(sizeof(struct page_region) * vec_size); 811 - vec2 = malloc(sizeof(struct page_region) * vec_size); 810 + vec = calloc(vec_size, sizeof(struct page_region)); 811 + vec2 = calloc(vec_size, sizeof(struct page_region)); 812 812 if (!vec || !vec2) 813 813 ksft_exit_fail_msg("malloc failed\n"); 814 814 ··· 997 997 void *start = (void *)0x10000000; 998 998 int written, len = 0x00040000; 999 999 long vec_size = len / page_size; 1000 - struct page_region *vec = malloc(sizeof(struct page_region) * vec_size); 1000 + struct page_region *vec = calloc(vec_size, sizeof(struct page_region)); 1001 1001 1002 1002 /* 1. Get written pages */ 1003 1003 written = pagemap_ioctl(start, len, vec, vec_size, 0, 0, ··· 1062 1062 mem_size = 10 * page_size; 1063 1063 vec_size = mem_size / page_size; 1064 1064 1065 - vec = malloc(sizeof(struct page_region) * vec_size); 1065 + vec = calloc(vec_size, sizeof(struct page_region)); 1066 1066 mem = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); 1067 1067 if (mem == MAP_FAILED || vec == MAP_FAILED) 1068 1068 ksft_exit_fail_msg("error nomem\n");