KVM: PPC: Book3S: Suppress warnings when allocating too big memory slots
[ Upstream commit 511d25d6b789fffcb20a3eb71899cf974a31bd9d ] 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@ozlabs.ru> [mpe: Use 'size' for the variable rather than 'cb'] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20210901084512.1658628-1-aik@ozlabs.ru Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
03c1595a18
commit
23bb3f01ce
@@ -4557,8 +4557,12 @@ static int kvmppc_core_prepare_memory_region_hv(struct kvm *kvm,
|
|||||||
unsigned long npages = mem->memory_size >> PAGE_SHIFT;
|
unsigned long npages = mem->memory_size >> PAGE_SHIFT;
|
||||||
|
|
||||||
if (change == KVM_MR_CREATE) {
|
if (change == KVM_MR_CREATE) {
|
||||||
slot->arch.rmap = vzalloc(array_size(npages,
|
unsigned long size = array_size(npages, sizeof(*slot->arch.rmap));
|
||||||
sizeof(*slot->arch.rmap)));
|
|
||||||
|
if ((size >> PAGE_SHIFT) > totalram_pages())
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
slot->arch.rmap = vzalloc(size);
|
||||||
if (!slot->arch.rmap)
|
if (!slot->arch.rmap)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user