[PATCH kernel] KVM: PPC: Book3S: Suppress warnings when allocating too big memory slots
Fabiano Rosas
farosas at linux.ibm.com
Thu Sep 2 00:59:47 AEST 2021
Alexey Kardashevskiy <aik at ozlabs.ru> writes:
> The userspace can trigger "vmalloc size %lu allocation failure: exceeds
> total pages" via the KVM_SET_USER_MEMORY_REGION ioctl.
>
> This silences the warning by checking the limit before calling vzalloc()
> and returns ENOMEM if failed.
>
> This does not call underlying valloc helpers as __vmalloc_node() is only
> exported when CONFIG_TEST_VMALLOC_MODULE and __vmalloc_node_range() is not
> exported at all.
>
> Spotted by syzkaller.
>
> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
> ---
> arch/powerpc/kvm/book3s_hv.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
> index 474c0cfde384..a59f1cccbcf9 100644
> --- a/arch/powerpc/kvm/book3s_hv.c
> +++ b/arch/powerpc/kvm/book3s_hv.c
> @@ -4830,8 +4830,12 @@ static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm,
> unsigned long npages = mem->memory_size >> PAGE_SHIFT;
>
> if (change == KVM_MR_CREATE) {
> - slot->arch.rmap = vzalloc(array_size(npages,
> - sizeof(*slot->arch.rmap)));
> + unsigned long cb = array_size(npages, sizeof(*slot->arch.rmap));
What does cb mean?
> +
> + if ((cb >> PAGE_SHIFT) > totalram_pages())
> + return -ENOMEM;
> +
> + slot->arch.rmap = vzalloc(cb);
> if (!slot->arch.rmap)
> return -ENOMEM;
> }
More information about the Linuxppc-dev
mailing list