From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <53FDADCF.5070503@redhat.com> Date: Wed, 27 Aug 2014 12:07:11 +0200 From: Paolo Bonzini MIME-Version: 1.0 To: Christian Borntraeger , Ben Hutchings CC: KVM , Gleb Natapov , Alexander Graf , Cornelia Huck , Jens Freimann , linux-s390 , stable@vger.kernel.org Subject: Re: [GIT PULL 2/2] KVM: s390/mm: try a cow on read only pages for key ops References: <1408972211-27122-1-git-send-email-borntraeger@de.ibm.com> <1408972211-27122-3-git-send-email-borntraeger@de.ibm.com> <1409108771.30127.21.camel@deadeye.wl.decadent.org.uk> <53FD8503.8040802@de.ibm.com> In-Reply-To: <53FD8503.8040802@de.ibm.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: kvm-owner@vger.kernel.org List-ID: Il 27/08/2014 09:13, Christian Borntraeger ha scritto: > On 27/08/14 05:06, Ben Hutchings wrote: >> On Mon, 2014-08-25 at 15:10 +0200, Christian Borntraeger wrote: >>> The PFMF instruction handler blindly wrote the storage key even if >>> the page was mapped R/O in the host. Lets try a COW before continuing >>> and bail out in case of errors. >>> >>> Signed-off-by: Christian Borntraeger >>> Reviewed-by: Dominik Dingel >>> Cc: stable@vger.kernel.org >>> --- >>> arch/s390/mm/pgtable.c | 10 ++++++++++ >>> 1 file changed, 10 insertions(+) >>> >>> diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c >>> index 19daa53..5404a62 100644 >>> --- a/arch/s390/mm/pgtable.c >>> +++ b/arch/s390/mm/pgtable.c >>> @@ -986,11 +986,21 @@ int set_guest_storage_key(struct mm_struct *mm, unsigned long addr, >>> pte_t *ptep; >>> >>> down_read(&mm->mmap_sem); >>> +retry: >>> ptep = get_locked_pte(current->mm, addr, &ptl); >>> if (unlikely(!ptep)) { >>> up_read(&mm->mmap_sem); >>> return -EFAULT; >>> } >>> + if (!(pte_val(*ptep) & _PAGE_INVALID) && >>> + (pte_val(*ptep) & _PAGE_PROTECT)) { >>> + pte_unmap_unlock(*ptep, ptl); >>> + if (fixup_user_fault(current, mm, addr, FAULT_FLAG_WRITE)) { >>> + up_read(&mm->mmap_sem); >>> + return -EFAULT; >>> + } >>> + goto retry; >>> + } >> >> Every line below the first 'if' is indented one tab stop too far. >> >> Ben. >> >>> new = old = pgste_get_lock(ptep); >>> pgste_val(new) &= ~(PGSTE_GR_BIT | PGSTE_GC_BIT | >> > > Hmm, indeed. Drat. Paolo, do you want a revert, resend? Just send a trivial patch to fix up the formatting. Paolo