summaryrefslogtreecommitdiff
path: root/kernel/module
diff options
context:
space:
mode:
authorKees Cook <kees@kernel.org>2025-11-19 14:54:43 -0800
committerSami Tolvanen <samitolvanen@google.com>2025-12-22 16:35:54 +0000
commit68e85558587e6bbb5c3ea3c8b4c71ab852e4b53e (patch)
treedc8ceb53ff0c1b9fed80938963431d506ac97d13 /kernel/module
parentddc54f912a551f6eb0bbcfc3880f45fe27a252cb (diff)
module/decompress: Avoid open-coded kvrealloc()
Replace open-coded allocate/copy with kvrealloc(). Signed-off-by: Kees Cook <kees@kernel.org> Reviewed-by: Petr Pavlu <petr.pavlu@suse.com> Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
Diffstat (limited to 'kernel/module')
-rw-r--r--kernel/module/decompress.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/module/decompress.c b/kernel/module/decompress.c
index 474e68f0f063..36f52a232a12 100644
--- a/kernel/module/decompress.c
+++ b/kernel/module/decompress.c
@@ -17,16 +17,16 @@
static int module_extend_max_pages(struct load_info *info, unsigned int extent)
{
struct page **new_pages;
+ unsigned int new_max = info->max_pages + extent;
- new_pages = kvmalloc_array(info->max_pages + extent,
- sizeof(info->pages), GFP_KERNEL);
+ new_pages = kvrealloc(info->pages,
+ size_mul(new_max, sizeof(*info->pages)),
+ GFP_KERNEL);
if (!new_pages)
return -ENOMEM;
- memcpy(new_pages, info->pages, info->max_pages * sizeof(info->pages));
- kvfree(info->pages);
info->pages = new_pages;
- info->max_pages += extent;
+ info->max_pages = new_max;
return 0;
}