diff mbox series

[kernel] KVM: PPC: Do not warn when userspace asked for too big TCE table

Message ID 20220628080228.1508847-1-aik@ozlabs.ru
State New
Headers show
Series [kernel] KVM: PPC: Do not warn when userspace asked for too big TCE table | expand

Commit Message

Alexey Kardashevskiy June 28, 2022, 8:02 a.m. UTC
KVM manages emulated TCE tables for guest LIOBNs by a two level table
which maps up to 128TiB with 16MB IOMMU pages (enabled in QEMU by default)
and MAX_ORDER=11 (the kernel's default). Note that the last level of
the table is allocated when actual TCE is updated.

However these tables are created via ioctl() on kvmfd and the userspace
can trigger WARN_ON_ONCE_GFP(order >= MAX_ORDER, gfp) in mm/page_alloc.c
and flood dmesg.

This adds __GFP_NOWARN.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---

We could probably switch to vmalloc() to allow even bigger
emulated tables which we do not really want the userspace
to create though.

---
 arch/powerpc/kvm/book3s_64_vio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Michael Ellerman July 9, 2022, 10:14 a.m. UTC | #1
On Tue, 28 Jun 2022 18:02:28 +1000, Alexey Kardashevskiy wrote:
> KVM manages emulated TCE tables for guest LIOBNs by a two level table
> which maps up to 128TiB with 16MB IOMMU pages (enabled in QEMU by default)
> and MAX_ORDER=11 (the kernel's default). Note that the last level of
> the table is allocated when actual TCE is updated.
> 
> However these tables are created via ioctl() on kvmfd and the userspace
> can trigger WARN_ON_ONCE_GFP(order >= MAX_ORDER, gfp) in mm/page_alloc.c
> and flood dmesg.
> 
> [...]

Applied to powerpc/topic/ppc-kvm.

[1/1] KVM: PPC: Do not warn when userspace asked for too big TCE table
      https://git.kernel.org/powerpc/c/4dee21e0f2520f5032b0abce0ecae593a71bd19d

cheers
diff mbox series

Patch

diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
index d6589c4fe889..40864373ef87 100644
--- a/arch/powerpc/kvm/book3s_64_vio.c
+++ b/arch/powerpc/kvm/book3s_64_vio.c
@@ -307,7 +307,7 @@  long kvm_vm_ioctl_create_spapr_tce(struct kvm *kvm,
 		return ret;
 
 	ret = -ENOMEM;
-	stt = kzalloc(struct_size(stt, pages, npages), GFP_KERNEL);
+	stt = kzalloc(struct_size(stt, pages, npages), GFP_KERNEL | __GFP_NOWARN);
 	if (!stt)
 		goto fail_acct;