2022-03-08 18:01:11

by Paolo Bonzini

[permalink] [raw]
Subject: [PATCH] KVM: use kvcalloc for array allocations

Instead of using array_size, use a function that takes care of the
multiplication. While at it, switch to kvcalloc since this allocation
should not be very large.

Signed-off-by: Paolo Bonzini <[email protected]>
---
arch/x86/kvm/cpuid.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index afcdd4e693e5..419eb8e14f79 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -1248,8 +1248,7 @@ int kvm_dev_ioctl_get_cpuid(struct kvm_cpuid2 *cpuid,
if (sanity_check_entries(entries, cpuid->nent, type))
return -EINVAL;

- array.entries = vzalloc(array_size(sizeof(struct kvm_cpuid_entry2),
- cpuid->nent));
+ array.entries = kvcalloc(sizeof(struct kvm_cpuid_entry2), cpuid->nent, GFP_KERNEL);
if (!array.entries)
return -ENOMEM;

@@ -1267,7 +1266,7 @@ int kvm_dev_ioctl_get_cpuid(struct kvm_cpuid2 *cpuid,
r = -EFAULT;

out_free:
- vfree(array.entries);
+ kvfree(array.entries);
return r;
}

--
2.31.1


2022-03-08 23:20:16

by Oliver Upton

[permalink] [raw]
Subject: Re: [PATCH] KVM: use kvcalloc for array allocations

On Tue, Mar 08, 2022 at 11:33:18AM -0500, Paolo Bonzini wrote:
> Instead of using array_size, use a function that takes care of the
> multiplication. While at it, switch to kvcalloc since this allocation
> should not be very large.
>
> Signed-off-by: Paolo Bonzini <[email protected]>
> ---
> arch/x86/kvm/cpuid.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
> index afcdd4e693e5..419eb8e14f79 100644
> --- a/arch/x86/kvm/cpuid.c
> +++ b/arch/x86/kvm/cpuid.c
> @@ -1248,8 +1248,7 @@ int kvm_dev_ioctl_get_cpuid(struct kvm_cpuid2 *cpuid,
> if (sanity_check_entries(entries, cpuid->nent, type))
> return -EINVAL;
>
> - array.entries = vzalloc(array_size(sizeof(struct kvm_cpuid_entry2),
> - cpuid->nent));
> + array.entries = kvcalloc(sizeof(struct kvm_cpuid_entry2), cpuid->nent, GFP_KERNEL);

Even though this allocation is short-lived, should we use
GFP_KERNEL_ACCOUNT instead?

Otherwise:

Reviewed-by: Oliver Upton <[email protected]>

Thanks!


> if (!array.entries)
> return -ENOMEM;
>
> @@ -1267,7 +1266,7 @@ int kvm_dev_ioctl_get_cpuid(struct kvm_cpuid2 *cpuid,
> r = -EFAULT;
>
> out_free:
> - vfree(array.entries);
> + kvfree(array.entries);
> return r;
> }
>
> --
> 2.31.1
>