Re: [RFC PATCH] kvmppc: protection keys fix

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 02, 2017 at 02:18:42PM +0530, Aneesh Kumar K.V wrote:
> Ram Pai <linuxram@xxxxxxxxxx> writes:
> 
> > kvmppc_do_h_enter() hcall, clobbers the high-order two bits of
> > the protection key in the lower pte (ptel). Hence
> > any pkey  number above 7 fails to behave.
> >
> > The following patch, preserves the pkey bits.
> >
> > Signed-off-by: Ram Pai <linuxram@xxxxxxxxxx>
> > ---
> >  arch/powerpc/include/asm/book3s/64/mmu-hash.h |    1 +
> >  arch/powerpc/kvm/book3s_hv_rm_mmu.c           |    2 +-
> >  2 files changed, 2 insertions(+), 1 deletions(-)
> >
> > diff --git a/arch/powerpc/include/asm/book3s/64/mmu-hash.h b/arch/powerpc/include/asm/book3s/64/mmu-hash.h
> > index 369f9ff..f07a1c0 100644
> > --- a/arch/powerpc/include/asm/book3s/64/mmu-hash.h
> > +++ b/arch/powerpc/include/asm/book3s/64/mmu-hash.h
> > @@ -109,6 +109,7 @@
> >  #define HPTE_R_KEY_BIT2		ASM_CONST(0x0000000000000800)
> >  #define HPTE_R_KEY_BIT3		ASM_CONST(0x0000000000000400)
> >  #define HPTE_R_KEY_BIT4		ASM_CONST(0x0000000000000200)
> > +#define HPTE_R_KEY		(HPTE_R_KEY_LO | HPTE_R_KEY_HI)
> >
> >  #define HPTE_V_1TB_SEG		ASM_CONST(0x4000000000000000)
> >  #define HPTE_V_VRMA_MASK	ASM_CONST(0x4001ffffff000000)
> > diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> > index ce6f212..d9462ab 100644
> > --- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> > +++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c
> > @@ -268,7 +268,7 @@ long kvmppc_do_h_enter(struct kvm *kvm, unsigned long flags,
> >  	if (!realmode)
> >  		local_irq_restore(irq_flags);
> >
> > -	ptel &= ~(HPTE_R_PP0 - psize);
> > +	ptel &= HPTE_R_KEY | HPTE_R_PP0 | (psize-1);
> 
> Is this all needed to get keys to work on kvm ? We use key value 31 and
> key value 0 along with absent and invalid hpte config to indicate mmio
> and host swapped pages ? Won't that need to be fixed ?

It should be fine, though if you want to audit the code go ahead.

Yong Ji fixed it last year to check for key 31 only when the HPTE is
absent, to clear the key when making a HPTE absent unless it is an
MMIO HPTE (and then it's set to 31), and to set the key to the
guest-requested key when making the HPTE present.

Paul.
--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux