]> git.apps.os.sepia.ceph.com Git - ceph-client.git/commitdiff
riscv: Use kvmalloc_array on relocation_hashtable
authorWill Pierce <wgpierce17@gmail.com>
Wed, 2 Apr 2025 08:14:26 +0000 (01:14 -0700)
committerAlexandre Ghiti <alexghiti@rivosinc.com>
Mon, 7 Apr 2025 08:21:11 +0000 (08:21 +0000)
The number of relocations may be a huge value that is unallocatable
by kmalloc. Use kvmalloc instead so that it does not fail.

Fixes: 8fd6c5142395 ("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>
arch/riscv/kernel/module.c

index 47d0ebeec93c23bccfb6edbd91e9a4f8a4fa6476..0ae34d79b87bd9b53a9c989bfbc09e5f78255c22 100644 (file)
@@ -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;