[Devel] [PATCH vz10] modules: use kvmalloc for the section attribute pointer array too
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Fri Jun 12 12:40:08 MSK 2026
Reviewed-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
On 6/11/26 22:42, Konstantin Khorenko wrote:
> The patch switched the struct module_sect_attrs allocation in
> add_sect_attrs() to kvzalloc() so a module with many ELF sections
> does not need a high-order allocation.
>
> The RHEL10.2 base carries upstream f47c0bebed44 ("module: sysfs:
> Simplify section attribute allocation"), which split the bin_attribute
> pointer array out of that struct into its own allocation:
>
> gattr = kcalloc(nloaded + 1, sizeof(*gattr), GFP_KERNEL);
>
> For a module with many sections this is another nloaded-sized array
> that can cross a page and require a high-order allocation - exactly
> what the patch set out to avoid. Allocate it with kvcalloc() and free
> it with kvfree() in free_sect_attrs().
>
> Fixes: 8b230b0af770 ("modules: use kvmalloc when creating sysfs attributes for ELF sections")
>
> Reported-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
> https://virtuozzo.atlassian.net/browse/VSTOR-132310
> Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
> ---
> kernel/module/sysfs.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/module/sysfs.c b/kernel/module/sysfs.c
> index a896022e6186..4d0286559123 100644
> --- a/kernel/module/sysfs.c
> +++ b/kernel/module/sysfs.c
> @@ -59,7 +59,7 @@ static void free_sect_attrs(struct module_sect_attrs *sect_attrs)
>
> for (bin_attr = sect_attrs->grp.bin_attrs_new; *bin_attr; bin_attr++)
> kfree((*bin_attr)->attr.name);
> - kfree(sect_attrs->grp.bin_attrs_new);
> + kvfree(sect_attrs->grp.bin_attrs_new);
> kvfree(sect_attrs);
> }
>
> @@ -79,7 +79,7 @@ static int add_sect_attrs(struct module *mod, const struct load_info *info)
> if (!sect_attrs)
> return -ENOMEM;
>
> - gattr = kcalloc(nloaded + 1, sizeof(*gattr), GFP_KERNEL);
> + gattr = kvcalloc(nloaded + 1, sizeof(*gattr), GFP_KERNEL);
> if (!gattr) {
> kvfree(sect_attrs);
> return -ENOMEM;
--
Best regards, Pavel Tikhomirov
Senior Software Developer, Virtuozzo.
More information about the Devel
mailing list