Skip to content

Commit 9f6c6ad

Browse files
ljskernelakpm00
authored andcommitted
lib/test_vmalloc.c: avoid garbage in page array
It turns out that alloc_pages_bulk_array() does not treat the page_array parameter as an output parameter, but rather reads the array and skips any entries that have already been allocated. This is somewhat unexpected and breaks this test, as we allocate the pages array uninitialised on the assumption it will be overwritten. As a result, the test was referencing uninitialised data and causing the PFN to not be valid and thus a WARN_ON() followed by a null pointer deref and panic. In addition, this is an array of pointers not of struct page objects, so we need only allocate an array with elements of pointer size. We solve both problems by simply using kcalloc() and referencing sizeof(struct page *) rather than sizeof(struct page). Link: https://lkml.kernel.org/r/20230524082424.10022-1-lstoakes@gmail.com Fixes: 869cb29 ("lib/test_vmalloc.c: add vm_map_ram()/vm_unmap_ram() test case") Signed-off-by: Lorenzo Stoakes <lstoakes@gmail.com> Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com> Reviewed-by: Baoquan He <bhe@redhat.com> Cc: Christoph Hellwig <hch@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent fee5eae commit 9f6c6ad

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

lib/test_vmalloc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ vm_map_ram_test(void)
369369
int i;
370370

371371
map_nr_pages = nr_pages > 0 ? nr_pages:1;
372-
pages = kmalloc(map_nr_pages * sizeof(struct page), GFP_KERNEL);
372+
pages = kcalloc(map_nr_pages, sizeof(struct page *), GFP_KERNEL);
373373
if (!pages)
374374
return -1;
375375

0 commit comments

Comments
 (0)