[PATCH] riscv: Use kvmalloc_array on relocation_hashtable

Alexandre Ghiti alex at ghiti.fr
Tue Apr 1 23:56:17 PDT 2025


Hi Will,

On 02/04/2025 07:34, wgpierce17 at gmail.com wrote:
> From: Will Pierce <wgpierce17 at gmail.com>
>
> The number of relocations may be a huge value that is unallocatable
> by kmalloc. Use kvmalloc instead so that it does not fail.
>
> Signed-off-by: Will Pierce <wgpierce17 at gmail.com>
> ---
>   arch/riscv/kernel/module.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/kernel/module.c b/arch/riscv/kernel/module.c
> index 47d0ebeec93c..bae3db50647c 100644
> --- a/arch/riscv/kernel/module.c
> +++ b/arch/riscv/kernel/module.c
> @@ -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,7 +752,8 @@ initialize_relocation_hashtable(unsigned int num_relocations,
>   
>   	hashtable_size <<= should_double_size;
>   
> -	*relocation_hashtable = kmalloc_array(hashtable_size,
> +	/* Number of relocations may be large, so kvmalloc it */
> +	*relocation_hashtable = kvmalloc_array(hashtable_size,
>   					      sizeof(**relocation_hashtable),
>   					      GFP_KERNEL);
>   	if (!*relocation_hashtable)


Let's add a fixes tag:

Fixes: 8fd6c5142395 ("riscv: Add remaining module relocations")

Since Clément suggested this solution:

Suggested-by: Clément Léger <cleger at rivosinc.com>

And finally, this looks good to me so:

Reviewed-by: Alexandre Ghiti <alexghiti at rivosinc.com>

It's a bit late for rc1 so I'll take this one for a next rc.

Thanks for the patch!

Alex





More information about the linux-riscv mailing list