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

Configure Feed

Select the types of activity you want to include in your feed.

mm/util: Introduce kmemdup_array()

Introduce kmemdup_array() API to duplicate `n` number of elements
from a given array. This internally uses kmemdup to allocate and duplicate
the `src` array.

Signed-off-by: Kartik <kkartik@nvidia.com>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Thierry Reding <treding@nvidia.com>

authored by

Kartik and committed by
Thierry Reding
7092e9b3 9863084d

+18
+1
include/linux/string.h
··· 217 217 extern void *kmemdup(const void *src, size_t len, gfp_t gfp) __realloc_size(2); 218 218 extern void *kvmemdup(const void *src, size_t len, gfp_t gfp) __realloc_size(2); 219 219 extern char *kmemdup_nul(const char *s, size_t len, gfp_t gfp); 220 + extern void *kmemdup_array(const void *src, size_t element_size, size_t count, gfp_t gfp); 220 221 221 222 extern char **argv_split(gfp_t gfp, const char *str, int *argcp); 222 223 extern void argv_free(char **argv);
+17
mm/util.c
··· 136 136 EXPORT_SYMBOL(kmemdup); 137 137 138 138 /** 139 + * kmemdup_array - duplicate a given array. 140 + * 141 + * @src: array to duplicate. 142 + * @element_size: size of each element of array. 143 + * @count: number of elements to duplicate from array. 144 + * @gfp: GFP mask to use. 145 + * 146 + * Return: duplicated array of @src or %NULL in case of error, 147 + * result is physically contiguous. Use kfree() to free. 148 + */ 149 + void *kmemdup_array(const void *src, size_t element_size, size_t count, gfp_t gfp) 150 + { 151 + return kmemdup(src, size_mul(element_size, count), gfp); 152 + } 153 + EXPORT_SYMBOL(kmemdup_array); 154 + 155 + /** 139 156 * kvmemdup - duplicate region of memory 140 157 * 141 158 * @src: memory region to duplicate