mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Cc: nsaenz@amazon.com, vkuznets@redhat.com, snambakam@linux.microsoft.com
Subject: Re: [PATCH v3 00/28] KVM: x86: Introduce memory protection attributes
Date: Fri, 18 Sep 2026 17:20:15 +0200	[thread overview]
Message-ID: <1460b98f-d8a4-4683-8d38-079727581ca1@redhat.com> (raw)
In-Reply-To: <20260918135030.171564-1-pbonzini@redhat.com>

On 9/18/26 15:49, Paolo Bonzini wrote:
> [cover letter copied from v2 - sorry for the very quick turnaround
> but it's pointless to ask for reviews with the issues reported by
> sashiko]
> 
> This series introduces a mechanism to let userspace block read,
> write or execute access to individual GFNs via KVM's memory
> attribute mechanism, and have them reported via KVM_EXIT_MEMORY_FAULT.
> It is mostly the work of Nicolas Saenz Julienne, with my working
> consisting in reorganization, code cleanup, and using the recently
> revamped MMU code (ACC_* masks and kvm_page_format).
> 
> KVM needs to check the attributes anytime KVM takes GPAs as input for any
> action initiated by the guest; if the memory attributes are incompatible
> with such action, it should be stopped.  This means that there are quite
> a lot of cases to handle.  While some families of functions can be
> handled in one step, there are simply many places that do memory access.
> 
> Along the way, the patches fix some issues in the memory attributes code,
> that surfaced due to having more than one attribute.
> 
> Paolo

The remaining AI review issues 
(https://sashiko.dev/#/patchset/20260918135030.171564-2-pbonzini%40redhat.com) 
are simple or intentional with one exception:

- patch 21 - missing xas.xa_node == XAS_BOUNDS check, easy enough

- patch 26 - missing EFAULT returns from the emulator, need to look at 
it and write tests

- patch 28 - i think it should be fine, but it can also be fixed with 
cond_resched() if needed

- patch 31 - WRITE_ONCE can be used for completeness

If desired, patches 1 and 5 can be applied to stable and/or 7.2-rc.

Paolo

> 
> v2->v3 is just a bunch of sashiko fixes:
> - new patch "KVM: x86/hyperv: do not overwrite hc->ingpa for slow
>    SIGNAL_EVENT hypercall"
> - rewritten "KVM: apply nGPA->GPA translation to KVM_HC_CLOCK_PAIRING"
>    to handle cross-patch accesses
> - rewrite choice of KVM_FILTER_SHARED/KVM_FILTER_PRIVATE prior to
>    setting memory attributes; even though the previous version worked,
>    it relied on not having any attribute at all for has_private_mem VMs
> - fix WARN_ON_ONCE/WARN_ONCE confusion
> - fix loongarch compilation
> - new (not really satisfactory_ patch "KVM: Take memory protections into
>    account for __kvm_vcpu_map"
> - fix incorrect NOT in "KVM: x86/mmu: Do not prefetch sptes on gfns backed
>    by memory attributes"
> - do not use kvm_mmu_prepare_memory_fault_exit() for attribute exits on
>    PTEs
> - new patch "KVM: let kvm_arch_post_set_memory_attributes drop mmu_lock"
> - testcase fixes
> 
> Anish Moorthy (1):
>    KVM: Define and communicate KVM_EXIT_MEMORY_FAULT RWX flags to
>      userspace
> 
> Nicolas Saenz Julienne (12):
>    KVM: selftests: Take into account mixed memory fault flags
>    KVM: x86/mmu: Init memslot hugepage information for non-private_mem
>      VMs too
>    KVM: Introduce NR/NW/NX memory attributes
>    KVM: Include memory protections in result of gfn->hva conversion
>    KVM: Take memory protections into account for memory read/write/fetch
>    KVM: Encapsulate memattrs array into anonymous struct
>    KVM: Introduce a generation number for memory attributes
>    KVM: Take memory protections into account for accesses with cached
>      gfn->hva
>    KVM: pfncache: Fail to refresh if it contains memory protections
>    KVM: x86/mmu: Do not prefetch sptes on gfns backed by memory
>      attributes
>    KVM: x86/mmu: Take memory protection attributes into account during
>      faults
>    KVM: x86/mmu: Issue memory fault exit if walk failed due to memory
>      attribute
> 
> Paolo Bonzini (18):
>    KVM: x86/hyperv: do not overwrite hc->ingpa for slow SIGNAL_EVENT
>      hypercall
>    KVM: selftests: Test address translation for Hyper-V direct L2
>      hypercalls
>    KVM: apply nGPA->GPA translation to KVM_HC_CLOCK_PAIRING
>    KVM: x86: Introduce memory fault on invalid hypercalls reads/writes
>    KVM: selftests: test hypercall memory fault exits
>    KVM: x86/mmu: intersect writability from __kvm_faultin_pfn with
>      fault->map_writable
>    KVM: x86/mmu: Extend map_writable to a full ACC_* mask
>    KVM: pass kvm == NULL case to kvm_arch_has_private_mem
>    KVM: adjust for presence of more than one attribute
>    KVM: Introduce kvm_fetch_guest_page() and use it for x86
>    KVM: Take memory protections into account for __kvm_vcpu_map
>    KVM: loongarch: do full validity check on the gfn-to-hva cache
>    KVM: Introduce kvm_check_gen()/kvm_memslots_check_gen()
>    KVM: let kvm_arch_post_set_memory_attributes drop mmu_lock
>    KVM: x86/mmu: Obsolete all roots if memattr contains gPTEs
>    KVM: x86: selftests: Introduce memory protection attributes test
>    KVM: x86: selftests: Introduce memory attributes PTE test
>    KVM: x86: selftests: Introduce memory attributes side-channel tests
> 
>   Documentation/virt/kvm/api.rst                |  38 +-
>   arch/loongarch/kvm/vcpu.c                     |  12 +-
>   arch/x86/include/asm/kvm_host.h               |   4 +-
>   arch/x86/kvm/Kconfig                          |   4 +-
>   arch/x86/kvm/hyperv.c                         | 172 +++++--
>   arch/x86/kvm/mmu/mmu.c                        | 183 +++++--
>   arch/x86/kvm/mmu/mmu_internal.h               |  21 +-
>   arch/x86/kvm/mmu/mmutrace.h                   |  36 ++
>   arch/x86/kvm/mmu/paging_tmpl.h                |  25 +-
>   arch/x86/kvm/mmu/spte.c                       |  12 +-
>   arch/x86/kvm/mmu/spte.h                       |  13 +-
>   arch/x86/kvm/mmu/tdp_mmu.c                    |   2 +-
>   arch/x86/kvm/x86.c                            |  66 ++-
>   include/linux/kvm_host.h                      | 128 ++++-
>   include/linux/kvm_types.h                     |   6 +-
>   include/trace/events/kvm.h                    |  14 +-
>   include/uapi/linux/kvm.h                      |   7 +
>   tools/include/uapi/linux/kvm.h                |   3 +
>   tools/testing/selftests/kvm/Makefile.kvm      |   2 +
>   .../testing/selftests/kvm/include/kvm_util.h  |  32 +-
>   .../selftests/kvm/include/x86/processor.h     |   1 +
>   .../testing/selftests/kvm/lib/x86/processor.c |   5 +
>   .../testing/selftests/kvm/memory_attributes.c | 453 ++++++++++++++++++
>   tools/testing/selftests/kvm/x86/hcall_fault.c | 246 ++++++++++
>   .../testing/selftests/kvm/x86/hyperv_evmcs.c  |  16 +-
>   .../selftests/kvm/x86/hyperv_svm_test.c       |  15 +-
>   .../selftests/kvm/x86/memory_attributes.c     | 415 ++++++++++++++++
>   .../kvm/x86/private_mem_kvm_exits_test.c      |   6 +-
>   virt/kvm/kvm_main.c                           | 271 +++++++++--
>   virt/kvm/pfncache.c                           |  30 +-
>   30 files changed, 2027 insertions(+), 211 deletions(-)
>   create mode 100644 tools/testing/selftests/kvm/memory_attributes.c
>   create mode 100644 tools/testing/selftests/kvm/x86/hcall_fault.c
>   create mode 100644 tools/testing/selftests/kvm/x86/memory_attributes.c
> 


      parent reply	other threads:[~2026-09-18 15:20 UTC|newest]

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

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=1460b98f-d8a4-4683-8d38-079727581ca1@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nsaenz@amazon.com \
    --cc=snambakam@linux.microsoft.com \
    --cc=vkuznets@redhat.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

all inboxes | Powered by JetHome®