Kernel KVM virtualization development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Paolo Bonzini" <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v2 19/28] KVM: Take memory protections into account for accesses with cached gfn->hva
Date: Fri, 18 Sep 2026 08:38:38 +0000	[thread overview]
Message-ID: <20260918083839.4F28C1F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260918081543.139871-20-pbonzini@redhat.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] kvm: loongarch build failure due to unrenamed ghc->generation field
--

commit d698f3639de00de4e2127e86617e1f29da8afef7
Author: Nicolas Saenz Julienne <nsaenz@amazon.com>

    KVM: Take memory protections into account for accesses with cached gfn->hva
    
    Account for memory attributes when accessing guest memory through
    kvm_get/put_guest().
    
    This requires tracking the memory attributes generation as part of
    gfn_to_hva_cache's data, invalidate the cached information if the
    generation changes, and failing to refresh the cache if restrictive
    memory attributes are found within the GPA range.

> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 2d85d7c9e0046..f10b14293e60e 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
[ ... ]
> @@ -3560,15 +3560,22 @@ static int __kvm_gfn_to_hva_cache_init(struct kvm *kvm,
>  	 * If the requested region crosses two memslots, we still
>  	 * verify that the entire region is valid here.
>  	 */
> -	for ( ; start_gfn <= end_gfn; start_gfn += nr_pages_avail) {
> -		ghc->memslot = __gfn_to_memslot(slots, start_gfn);
> -		ghc->hva = gfn_to_hva_many(ghc->memslot, start_gfn,
> -					   &nr_pages_avail);
> +	for (gfn_t gfn = start_gfn ; gfn <= end_gfn; gfn += nr_pages_avail) {
> +		ghc->memslot = __gfn_to_memslot(slots, gfn);
> +		ghc->hva = gfn_to_hva_many(ghc->memslot, gfn, &nr_pages_avail);
>  		if (kvm_is_error_hva(ghc->hva))
>  			return -EFAULT;
>  	}
>  
> +	/*
> +	 * RW memory attributes are incompatible with GHC. The RW protection
> +	 * check has to happen after storing the generation number.
> +	 */
>  	ghc->attrs_generation = kvm_mem_attributes_generation(kvm);

[Severity: Low]
Does this patchset break the build on LoongArch?

In arch/loongarch/kvm/vcpu.c, kvm_update_stolen_time() and
kvm_vcpu_set_pv_preempted() still reference the removed ghc->generation field
and fail to verify memory attribute generations:

arch/loongarch/kvm/vcpu.c:kvm_update_stolen_time() {
    ...
	if (slots->generation != ghc->generation || gpa != ghc->gpa) {
    ...
}

arch/loongarch/kvm/vcpu.c:kvm_vcpu_set_pv_preempted() {
    ...
	if (slots->generation != ghc->generation || gpa != ghc->gpa) {
    ...
}

With the transition to ghc->attrs_generation and ghc->slots_generation across
this patchset (specifically since the prior patch "KVM: Introduce a generation
number for memory attributes"), these manual generation checks will fail to
compile.

Could these be updated to use kvm_check_gen()?

> +	if (kvm_range_has_rw_memory_protections(kvm, start_gfn, end_gfn + 1)) {
> +		ghc->hva = KVM_HVA_ERR_BAD;
> +		return -EFAULT;
> +	}
>  
>  	/* Use the slow path for cross page reads and writes. */
>  	if (nr_pages_needed == 1)

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260918081543.139871-1-pbonzini@redhat.com?part=19

  reply	other threads:[~2026-09-18  8:38 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-18  8:15 [PATCH v2 00/28] KVM: x86: Introduce memory protection attributes Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 01/28] KVM: selftests: Take into account mixed memory fault flags Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 02/28] KVM: Define and communicate KVM_EXIT_MEMORY_FAULT RWX flags to userspace Paolo Bonzini
2026-09-18  8:27   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 03/28] KVM: selftests: Test address translation for Hyper-V direct L2 hypercalls Paolo Bonzini
2026-09-18  8:30   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 04/28] KVM: apply nGPA->GPA translation to KVM_HC_CLOCK_PAIRING Paolo Bonzini
2026-09-18  8:34   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 05/28] KVM: x86: Introduce memory fault on invalid hypercalls reads/writes Paolo Bonzini
2026-09-18  8:33   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 06/28] KVM: selftests: test hypercall memory fault exits Paolo Bonzini
2026-09-18  8:24   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 07/28] KVM: x86/mmu: intersect writability from __kvm_faultin_pfn with fault->map_writable Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 08/28] KVM: x86/mmu: Extend map_writable to a full ACC_* mask Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 09/28] KVM: x86/mmu: Init memslot hugepage information for non-private_mem VMs too Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 10/28] KVM: pass kvm == NULL case to kvm_arch_has_private_mem Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 11/28] KVM: adjust for presence of more than one attribute Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 12/28] KVM: Introduce NR/NW/NX memory attributes Paolo Bonzini
2026-09-18  8:36   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 13/28] KVM: Include memory protections in result of gfn->hva conversion Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 14/28] KVM: Introduce kvm_fetch_guest_page() and use it for x86 Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 15/28] KVM: Take memory protections into account for memory read/write/fetch Paolo Bonzini
2026-09-18  8:34   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 16/28] KVM: Encapsulate memattrs array into anonymous struct Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 17/28] KVM: Introduce kvm_check_gen()/kvm_memslots_check_gen() Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 18/28] KVM: Introduce a generation number for memory attributes Paolo Bonzini
2026-09-18  8:39   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 19/28] KVM: Take memory protections into account for accesses with cached gfn->hva Paolo Bonzini
2026-09-18  8:38   ` sashiko-bot [this message]
2026-09-18  8:15 ` [PATCH v2 20/28] KVM: pfncache: Fail to refresh if it contains memory protections Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 21/28] KVM: x86/mmu: Take memory protection attributes into account during faults Paolo Bonzini
2026-09-18  8:46   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 22/28] KVM: x86/mmu: Issue memory fault exit if walk failed due to memory attribute Paolo Bonzini
2026-09-18  8:37   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 23/28] KVM: x86/mmu: Do not update accessed/dirty if guest PTE is read-only Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 24/28] KVM: x86/mmu: Do not prefetch sptes on gfns backed by memory attributes Paolo Bonzini
2026-09-18  8:36   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 25/28] KVM: x86/mmu: Obsolete all roots if memattr contains gPTEs Paolo Bonzini
2026-09-18  8:43   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 26/28] KVM: x86: selftests: Introduce memory protection attributes test Paolo Bonzini
2026-09-18  8:39   ` sashiko-bot
2026-09-18  8:15 ` [PATCH v2 27/28] KVM: x86: selftests: Introduce memory attributes PTE test Paolo Bonzini
2026-09-18  8:15 ` [PATCH v2 28/28] KVM: x86: selftests: Introduce memory attributes side-channel tests Paolo Bonzini
2026-09-18  8:43   ` sashiko-bot

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=20260918083839.4F28C1F000FF@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=sashiko-reviews@lists.linux.dev \
    /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