Re: [PATCH v3 4/9] KVM: guest_memfd: add GUEST_MEMFD_FLAG_MIGRATABLE

"Garg, Shivank" <[email protected]>
Newsgroups org.kernel.vger.kvm,dev.linux.lists.sashiko-reviews
Message-ID <[email protected]>
On Wed, 2026-08-05 at 07:08 +0000, [email protected] wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [Medium] Global capability check for KVM_CAP_GUEST_MEMFD_FLAGS falsely advertises GUEST_MEMFD_FLAG_MIGRATABLE on unsupported architectures.
> - [Low] Typo in API documentation for GUEST_MEMFD_FLAG_MIGRATABLE.
> --
> 
> --- Patch [4]: [PATCH v3 4/9] KVM: guest_memfd: add GUEST_MEMFD_FLAG_MIGRATABLE ---
> commit f12765f58cf3ad7c38abcf69c609570a66578e93
> Author: Shivank Garg <[email protected]>
> 
> KVM: guest_memfd: add GUEST_MEMFD_FLAG_MIGRATABLE
>     
> This patch adds architecture support checks and a new flag,
> GUEST_MEMFD_FLAG_MIGRATABLE, to allow the MM to migrate guest_memfd folios.
> It updates the mapping GFP mask and removes a redundant WARN_ON_ONCE.
> 
> > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
> > index e3003a241d5b0..976921527ef9a 100644
> > --- a/Documentation/virt/kvm/api.rst
> > +++ b/Documentation/virt/kvm/api.rst
> > @@ -6461,6 +6461,9 @@ specified via KVM_CREATE_GUEST_MEMFD.  Currently defined flags:
> >                                 without INIT_SHARED will be marked private).
> >                                 Shared memory can be faulted into host userspace
> >                                 page tables. Private memory cannot.
> > + GUEST_MEMFD_FLAG_MIGRATABLE   Allow MM to migrate guest_memfd folios.
> > +                               Availability is architecture sepecific. Without
> 
> [Severity: Low]
> This isn't a bug, but there is a typo here (sepecific instead of specific).
> 

Ack. Will correct this.

> > +                               this flag, folios remain unmovable.
> >    ============================ ================================================
> 
> [ ... ]
> 
> > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> > index 47cb9eba113b1..7087b0b8f973f 100644
> > --- a/arch/x86/kvm/x86.c
> > +++ b/arch/x86/kvm/x86.c
> > @@ -14130,6 +14130,15 @@ bool kvm_arch_supports_gmem_init_shared(struct kvm *kvm)
> >  	return !kvm_arch_has_private_mem(kvm);
> >  }
> >  
> > +/*
> > + * Migration of guest_memfd with private memory is not supported yet
> > + * as this may require architecture-specific handling.
> > + */
> > +bool kvm_arch_supports_gmem_migration(struct kvm *kvm)
> > +{
> > +	return !kvm_arch_has_private_mem(kvm);
> > +}
> 
> [ ... ]
> 
> > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> > index ab8cfaec82d31..7b2f15b219705 100644
> > --- a/include/linux/kvm_host.h
> > +++ b/include/linux/kvm_host.h
> > @@ -731,6 +731,7 @@ static inline bool kvm_arch_has_private_mem(struct kvm *kvm)
> >  
> >  #ifdef CONFIG_KVM_GUEST_MEMFD
> >  bool kvm_arch_supports_gmem_init_shared(struct kvm *kvm);
> > +bool kvm_arch_supports_gmem_migration(struct kvm *kvm);
> >  
> >  static inline u64 kvm_gmem_get_supported_flags(struct kvm *kvm)
> >  {
> > @@ -738,6 +739,9 @@ static inline u64 kvm_gmem_get_supported_flags(struct kvm *kvm)
> >  
> >  	if (!kvm || kvm_arch_supports_gmem_init_shared(kvm))
> >  		flags |= GUEST_MEMFD_FLAG_INIT_SHARED;
> > +	if (IS_ENABLED(CONFIG_MIGRATION) &&
> > +	    (!kvm || kvm_arch_supports_gmem_migration(kvm)))
> > +		flags |= GUEST_MEMFD_FLAG_MIGRATABLE;
> 
> [Severity: Medium]
> When userspace queries KVM_CAP_GUEST_MEMFD_FLAGS on the global /dev/kvm
> file descriptor, kvm is NULL. Does the !kvm check here cause the API to
> unconditionally advertise GUEST_MEMFD_FLAG_MIGRATABLE for all architectures
> where CONFIG_MIGRATION is enabled?
> 
> If so, architectures that do not support migration (relying on the weak
> default returning false) would advertise support globally, but then return
> -EINVAL when userspace actually attempts to create a guest_memfd with this
> flag.
> 
> If we drop the !kvm bypass to fix the capability advertisement, would the
> x86 implementation of kvm_arch_supports_gmem_migration() shown above need an
> explicit check for a NULL kvm pointer before passing it to
> kvm_arch_has_private_mem()?
> 
> -- 
> Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=4


So, IIUC, I can have an IS_ENABLED(CONFIG_MIGRATION) check to not advertise
the MIGRATE flag globally.

Thanks,
Shivank
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.