From: Xiao Guangrong <guangrong.xiao@linux.intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: gleb@kernel.org, mtosatti@redhat.com, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/4] KVM: MMU: fix permission_fault()
Date: Wed, 30 Mar 2016 01:43:42 +0800 [thread overview]
Message-ID: <56FABECE.40601@linux.intel.com> (raw)
In-Reply-To: <56F54983.4010508@redhat.com>
On 03/25/2016 10:21 PM, Paolo Bonzini wrote:
>
>
> On 25/03/2016 14:19, Xiao Guangrong wrote:
>> WARN_ON(pfec & (PFERR_PK_MASK | PFERR_RSVD_MASK));
>> - pfec |= PFERR_PRESENT_MASK;
>> + errcode = PFERR_PRESENT_MASK;
>>
>> if (unlikely(mmu->pkru_mask)) {
>> u32 pkru_bits, offset;
>> @@ -193,11 +193,11 @@ static inline u8 permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
>> ((pte_access & PT_USER_MASK) << (PFERR_RSVD_BIT - PT_USER_SHIFT));
>>
>> pkru_bits &= mmu->pkru_mask >> offset;
>> - pfec |= -pkru_bits & PFERR_PK_MASK;
>> + errcode |= -pkru_bits & PFERR_PK_MASK;
>> fault |= (pkru_bits != 0);
>> }
>>
>> - return -(uint32_t)fault & pfec;
>> + return -(uint32_t)fault & errcode;
>> }
>
> I have another doubt here.
>
> If you get a fault due to U=0, you would not get PFERR_PK_MASK. This
> is checked implicitly through the pte_user bit which we moved to
> PFERR_RSVD_BIT. However, if you get a fault due to W=0 _and_
> PKRU.AD=1 or PKRU.WD=1 for the page's protection key, would the PK
> bit be set in the error code? If not, we would need something like
> this:
Based on the SDM:
PK flag (bit 5).
This flag is 1 if (1) IA32_EFER.LMA = CR4.PKE = 1; (2) the access causing the page-fault exception
was a data access; (3) the linear address was a user-mode address with protection key i; and (5) the
PKRU register (see Section 4.6.2) is such that either (a) ADi = 1; or (b) the following all hold:
(i) WDi = 1; (ii) the access is a write access; and (iii) either CR0.WP = 1 or the access causing
the page-fault exception was a user-mode access.
So I think PKEY check and ordinary check are independent, i.e, PFEC.PKEY may be
set even if the on permission on the page table is not adequate.
next prev parent reply other threads:[~2016-03-29 17:44 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-25 13:19 [PATCH 1/4] KVM: MMU: fix permission_fault() Xiao Guangrong
2016-03-25 13:19 ` [PATCH 2/4] KVM: MMU: simplify the logic of __mmu_unsync_walk() Xiao Guangrong
2016-03-25 13:19 ` [PATCH 3/4] KVM: MMU: reduce the size of mmu_page_path Xiao Guangrong
2016-03-25 13:45 ` Paolo Bonzini
2016-03-25 13:48 ` Xiao Guangrong
2016-03-25 13:56 ` Paolo Bonzini
2016-03-25 14:07 ` Xiao Guangrong
2016-03-25 14:22 ` Paolo Bonzini
2016-03-25 13:19 ` [PATCH 4/4] KVM: MMU: skip obsolete sp in for_each_gfn_*() Xiao Guangrong
2016-03-29 9:44 ` Paolo Bonzini
2016-03-25 13:35 ` [PATCH 1/4] KVM: MMU: fix permission_fault() Paolo Bonzini
2016-03-25 13:41 ` Xiao Guangrong
2016-03-25 13:50 ` Paolo Bonzini
2016-03-25 14:21 ` Paolo Bonzini
2016-03-29 17:43 ` Xiao Guangrong [this message]
2016-03-29 20:09 ` Paolo Bonzini
2016-03-30 1:56 ` Xiao Guangrong
2016-03-30 6:36 ` Paolo Bonzini
2016-03-30 6:39 ` Xiao Guangrong
2016-04-06 3:27 ` Xiao Guangrong
2016-04-06 8:17 ` Paolo Bonzini
2016-04-06 8:56 ` Paolo Bonzini
2016-04-06 15:09 ` Xiao Guangrong
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=56FABECE.40601@linux.intel.com \
--to=guangrong.xiao@linux.intel.com \
--cc=gleb@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=pbonzini@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;
as well as URLs for NNTP newsgroup(s).