lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 7 Dec 2022 23:11:53 +0800 From: Chao Peng <chao.p.peng@...ux.intel.com> To: Fuad Tabba <tabba@...gle.com> Cc: kvm@...r.kernel.org, linux-kernel@...r.kernel.org, linux-mm@...ck.org, linux-fsdevel@...r.kernel.org, linux-arch@...r.kernel.org, linux-api@...r.kernel.org, linux-doc@...r.kernel.org, qemu-devel@...gnu.org, Paolo Bonzini <pbonzini@...hat.com>, Jonathan Corbet <corbet@....net>, Sean Christopherson <seanjc@...gle.com>, Vitaly Kuznetsov <vkuznets@...hat.com>, Wanpeng Li <wanpengli@...cent.com>, Jim Mattson <jmattson@...gle.com>, Joerg Roedel <joro@...tes.org>, Thomas Gleixner <tglx@...utronix.de>, Ingo Molnar <mingo@...hat.com>, Borislav Petkov <bp@...en8.de>, Arnd Bergmann <arnd@...db.de>, Naoya Horiguchi <naoya.horiguchi@....com>, Miaohe Lin <linmiaohe@...wei.com>, x86@...nel.org, "H . Peter Anvin" <hpa@...or.com>, Hugh Dickins <hughd@...gle.com>, Jeff Layton <jlayton@...nel.org>, "J . Bruce Fields" <bfields@...ldses.org>, Andrew Morton <akpm@...ux-foundation.org>, Shuah Khan <shuah@...nel.org>, Mike Rapoport <rppt@...nel.org>, Steven Price <steven.price@....com>, "Maciej S . Szmigiero" <mail@...iej.szmigiero.name>, Vlastimil Babka <vbabka@...e.cz>, Vishal Annapurve <vannapurve@...gle.com>, Yu Zhang <yu.c.zhang@...ux.intel.com>, "Kirill A . Shutemov" <kirill.shutemov@...ux.intel.com>, luto@...nel.org, jun.nakajima@...el.com, dave.hansen@...el.com, ak@...ux.intel.com, david@...hat.com, aarcange@...hat.com, ddutile@...hat.com, dhildenb@...hat.com, Quentin Perret <qperret@...gle.com>, Michael Roth <michael.roth@....com>, mhocko@...e.com, wei.w.wang@...el.com Subject: Re: [PATCH v10 4/9] KVM: Add KVM_EXIT_MEMORY_FAULT exit On Tue, Dec 06, 2022 at 03:47:20PM +0000, Fuad Tabba wrote: > Hi, > > On Fri, Dec 2, 2022 at 6:19 AM Chao Peng <chao.p.peng@...ux.intel.com> wrote: > > > > This new KVM exit allows userspace to handle memory-related errors. It > > indicates an error happens in KVM at guest memory range [gpa, gpa+size). > > The flags includes additional information for userspace to handle the > > error. Currently bit 0 is defined as 'private memory' where '1' > > indicates error happens due to private memory access and '0' indicates > > error happens due to shared memory access. > > > > When private memory is enabled, this new exit will be used for KVM to > > exit to userspace for shared <-> private memory conversion in memory > > encryption usage. In such usage, typically there are two kind of memory > > conversions: > > - explicit conversion: happens when guest explicitly calls into KVM > > to map a range (as private or shared), KVM then exits to userspace > > to perform the map/unmap operations. > > - implicit conversion: happens in KVM page fault handler where KVM > > exits to userspace for an implicit conversion when the page is in a > > different state than requested (private or shared). > > > > Suggested-by: Sean Christopherson <seanjc@...gle.com> > > Co-developed-by: Yu Zhang <yu.c.zhang@...ux.intel.com> > > Signed-off-by: Yu Zhang <yu.c.zhang@...ux.intel.com> > > Signed-off-by: Chao Peng <chao.p.peng@...ux.intel.com> > > Reviewed-by: Fuad Tabba <tabba@...gle.com> > > --- > > Documentation/virt/kvm/api.rst | 22 ++++++++++++++++++++++ > > include/uapi/linux/kvm.h | 8 ++++++++ > > 2 files changed, 30 insertions(+) > > > > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst > > index 99352170c130..d9edb14ce30b 100644 > > --- a/Documentation/virt/kvm/api.rst > > +++ b/Documentation/virt/kvm/api.rst > > @@ -6634,6 +6634,28 @@ array field represents return values. The userspace should update the return > > values of SBI call before resuming the VCPU. For more details on RISC-V SBI > > spec refer, https://github.com/riscv/riscv-sbi-doc. > > > > +:: > > + > > + /* KVM_EXIT_MEMORY_FAULT */ > > + struct { > > + #define KVM_MEMORY_EXIT_FLAG_PRIVATE (1ULL << 0) > > + __u64 flags; > > I see you've removed the padding and increased the flag size. Yes Sean suggested this and also looks good to me. Chao > > Reviewed-by: Fuad Tabba <tabba@...gle.com> > Tested-by: Fuad Tabba <tabba@...gle.com> > > Cheers, > /fuad > > > > > > + __u64 gpa; > > + __u64 size; > > + } memory; > > + > > +If exit reason is KVM_EXIT_MEMORY_FAULT then it indicates that the VCPU has > > +encountered a memory error which is not handled by KVM kernel module and > > +userspace may choose to handle it. The 'flags' field indicates the memory > > +properties of the exit. > > + > > + - KVM_MEMORY_EXIT_FLAG_PRIVATE - indicates the memory error is caused by > > + private memory access when the bit is set. Otherwise the memory error is > > + caused by shared memory access when the bit is clear. > > + > > +'gpa' and 'size' indicate the memory range the error occurs at. The userspace > > +may handle the error and return to KVM to retry the previous memory access. > > + > > :: > > > > /* KVM_EXIT_NOTIFY */ > > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > > index 13bff963b8b0..c7e9d375a902 100644 > > --- a/include/uapi/linux/kvm.h > > +++ b/include/uapi/linux/kvm.h > > @@ -300,6 +300,7 @@ struct kvm_xen_exit { > > #define KVM_EXIT_RISCV_SBI 35 > > #define KVM_EXIT_RISCV_CSR 36 > > #define KVM_EXIT_NOTIFY 37 > > +#define KVM_EXIT_MEMORY_FAULT 38 > > > > /* For KVM_EXIT_INTERNAL_ERROR */ > > /* Emulate instruction failed. */ > > @@ -541,6 +542,13 @@ struct kvm_run { > > #define KVM_NOTIFY_CONTEXT_INVALID (1 << 0) > > __u32 flags; > > } notify; > > + /* KVM_EXIT_MEMORY_FAULT */ > > + struct { > > +#define KVM_MEMORY_EXIT_FLAG_PRIVATE (1ULL << 0) > > + __u64 flags; > > + __u64 gpa; > > + __u64 size; > > + } memory; > > /* Fix the size of the union. */ > > char padding[256]; > > }; > > -- > > 2.25.1 > >
Powered by blists - more mailing lists