Kernel KVM virtualization development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Sean Christopherson" <seanjc@google.com>
Cc: kvmarm@lists.linux.dev, "Marc Zyngier" <maz@kernel.org>,
	kvm@vger.kernel.org, "Oliver Upton" <oupton@kernel.org>
Subject: Re: [PATCH 20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned
Date: Wed, 26 Aug 2026 23:18:42 +0000	[thread overview]
Message-ID: <20260826231842.ADF381F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260826230511.972824-21-seanjc@google.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The physical page allocator uses the ALIGN() macro with nr_pages as the alignment, which miscalculates physical addresses if nr_pages is not a power of two.
--

commit e164bd04c5d3f08c13c51c2171eea3a520c79ec4
Author: Sean Christopherson <seanjc@google.com>

KVM: selftests: Add arch hook to force page tables to be naturally aligned

This commit adds an arch hook to communicate to the core physical page
allocator that page table allocations need to be naturally aligned. The hook
will be used for upcoming PowerPC support, which has MMU tables that are
larger than the guest base page size.

> diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
> --- a/tools/testing/selftests/kvm/lib/kvm_util.c
> +++ b/tools/testing/selftests/kvm/lib/kvm_util.c
[ ... ]
> @@ -2110,6 +2116,7 @@ gpa_t __vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages,
>  		break;
>  	case MEM_REGION_PT:
>  		min_gpa = KVM_GUEST_PAGE_TABLE_MIN_PADDR;
> +		naturally_aligned = kvm_arch_needs_naturally_aligned_page_tables();
>  		break;
>  	case MEM_REGION_TEST_EXTRA:
>  		min_gpa = region->region.guest_phys_addr;
> @@ -2120,7 +2127,7 @@ gpa_t __vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages,
>  	}
>  
>  	return ____vm_phy_pages_alloc(vm, nr_pages, min_gpa, vm->memslots[type],
> -				      protected, false);
> +				      protected, naturally_aligned);
>  }

[Severity: Medium]
When naturally_aligned is set to true here, is it guaranteed that nr_pages 
will always be a power of two?

Looking at ____vm_phy_pages_alloc(), the nr_pages parameter is used directly
as the alignment value:

____vm_phy_pages_alloc() {
        size_t alignment = naturally_aligned ? nr_pages : 1;
        ...
        base = ALIGN(base, alignment);
        ...
}

The ALIGN(x, a) macro in the kernel is implemented using bitwise operations
((x + (a - 1)) & ~(a - 1)), which inherently require the alignment
parameter to be a strictly power-of-two value. If a test requests a
non-power-of-two number of pages for page table memory, this causes a
bitwise truncation that results in an incorrectly calculated physical
address.

Because there is no TEST_ASSERT enforcing that nr_pages is a power of two
when naturally_aligned is requested, could this lead to silent memory
overlaps and guest data corruption? Should we enforce that nr_pages is a
power of two, or round the alignment up?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260826230511.972824-1-seanjc@google.com?part=20

  reply	other threads:[~2026-08-26 23:18 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-26 23:04 [PATCH 00/20] KVM: selftests: PPC pre-enabling Sean Christopherson
2026-08-26 23:04 ` [PATCH 01/20] KVM: selftests: Use MEM_REGION_PT memslot instead of '0' for s390 regions/segments Sean Christopherson
2026-08-26 23:13   ` sashiko-bot
2026-08-26 23:04 ` [PATCH 02/20] KVM: selftests: Bump the minimum GPA for page tables to 0x200000 Sean Christopherson
2026-08-26 23:22   ` sashiko-bot
2026-08-26 23:38     ` Sean Christopherson
2026-08-27  6:34       ` Bibo Mao
2026-08-27 13:44         ` Sean Christopherson
2026-08-28 17:58   ` Claudio Imbrenda
2026-08-28 18:07     ` Sean Christopherson
2026-08-26 23:04 ` [PATCH 03/20] KVM: selftests: Use vm_alloc_page_table() to allocate LoongArch page tables Sean Christopherson
2026-08-27  6:43   ` Bibo Mao
2026-08-26 23:04 ` [PATCH 04/20] KVM: selftests: Rename "num" param to "nr_pages" for physical page allocators Sean Christopherson
2026-08-26 23:12   ` sashiko-bot
2026-08-26 23:04 ` [PATCH 05/20] KVM: selftests: Use goto instead of do-while to retry finding unused physical pages Sean Christopherson
2026-08-26 23:04 ` [PATCH 06/20] KVM: selftests: Extend page allocator to support naturally aligned allocations Sean Christopherson
2026-08-26 23:04 ` [PATCH 07/20] KVM: selftests: Make the single-page allocator APIs static inline Sean Christopherson
2026-08-26 23:04 ` [PATCH 08/20] KVM: selftests: Use the innermost page allocator API in the memslot perf test Sean Christopherson
2026-08-26 23:05 ` [PATCH 09/20] KVM: selftests: Use the innermost page allocator API in s390's IRQ routing test Sean Christopherson
2026-08-26 23:05 ` [PATCH 10/20] KVM: selftests: Add a wrapper API to allocate multiple page table pages Sean Christopherson
2026-08-27  5:27   ` Itaru Kitayama
2026-08-26 23:05 ` [PATCH 11/20] KVM: selftests: Initialize vm->memslots[] with invalid memslots during creation Sean Christopherson
2026-08-26 23:05 ` [PATCH 12/20] KVM: selftests: Add APIs to override memory region types with custom memslots Sean Christopherson
2026-08-26 23:05 ` [PATCH 13/20] KVM: selftests: Add TEST_EXTRA memory region type for "special" memslots Sean Christopherson
2026-08-26 23:15   ` sashiko-bot
2026-08-27  4:37   ` Itaru Kitayama
2026-08-26 23:05 ` [PATCH 14/20] KVM: selftests: Use TEST_EXTRA region in arm64's vGIC LPI stress test Sean Christopherson
2026-08-26 23:05 ` [PATCH 15/20] KVM: selftests: Use TEST_EXTRA region in x86's smaller MAXPHYADDR test Sean Christopherson
2026-08-26 23:05 ` [PATCH 16/20] KVM: selftests: Use TEST_EXTRA region in set memory region test Sean Christopherson
2026-08-26 23:05 ` [PATCH 17/20] KVM: selftests: Take the memory region type, not memslot, in page allocators Sean Christopherson
2026-08-26 23:05 ` [PATCH 18/20] KVM: selftests: Use TEST_ASSERT(), not assert(), in vm_get_mem_region() Sean Christopherson
2026-08-26 23:05 ` [PATCH 19/20] KVM: selftests: Automatically pick min_gpa for allocations based on region type Sean Christopherson
2026-08-26 23:19   ` sashiko-bot
2026-08-26 23:05 ` [PATCH 20/20] KVM: selftests: Add arch hook to force page tables to be naturally aligned Sean Christopherson
2026-08-26 23:18   ` sashiko-bot [this message]
2026-08-27  8:07 ` [PATCH 00/20] KVM: selftests: PPC pre-enabling Itaru Kitayama

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260826231842.ADF381F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=maz@kernel.org \
    --cc=oupton@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=seanjc@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox