riscv: Use kvmalloc_array on relocation_hashtable
[ Upstream commit 8578b2f7e1fb79d4b92b62fbbe913548bb363654 ]
The number of relocations may be a huge value that is unallocatable
by kmalloc. Use kvmalloc instead so that it does not fail.
Fixes: 8fd6c51423 ("riscv: Add remaining module relocations")
Suggested-by: Clément Léger <cleger@rivosinc.com>
Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Signed-off-by: Will Pierce <wgpierce17@gmail.com>
Link: https://lore.kernel.org/r/20250402081426.5197-1-wgpierce17@gmail.com
Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
cfdcd213dd
commit
c8c3f8e7a7
@@ -648,7 +648,7 @@ process_accumulated_relocations(struct module *me,
|
||||
kfree(bucket_iter);
|
||||
}
|
||||
|
||||
kfree(*relocation_hashtable);
|
||||
kvfree(*relocation_hashtable);
|
||||
}
|
||||
|
||||
static int add_relocation_to_accumulate(struct module *me, int type,
|
||||
@@ -752,9 +752,10 @@ initialize_relocation_hashtable(unsigned int num_relocations,
|
||||
|
||||
hashtable_size <<= should_double_size;
|
||||
|
||||
*relocation_hashtable = kmalloc_array(hashtable_size,
|
||||
sizeof(**relocation_hashtable),
|
||||
GFP_KERNEL);
|
||||
/* Number of relocations may be large, so kvmalloc it */
|
||||
*relocation_hashtable = kvmalloc_array(hashtable_size,
|
||||
sizeof(**relocation_hashtable),
|
||||
GFP_KERNEL);
|
||||
if (!*relocation_hashtable)
|
||||
return 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user