From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH v2 0/3] Fix task switches into/out of VM86 Date: Mon, 30 Jan 2012 12:47:11 +0200 Message-ID: <20120130104711.GB23536@redhat.com> References: <1327692216-20450-1-git-send-email-kwolf@redhat.com> <20120127195239.GB2938@redhat.com> <4F265961.3070501@redhat.com> <20120130085541.GI30469@redhat.com> <4F267254.7040900@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: kvm@vger.kernel.org, joerg.roedel@amd.com, yoshikawa.takuya@oss.ntt.co.jp, avi@redhat.com, mtosatti@redhat.com To: Kevin Wolf Return-path: Received: from mx1.redhat.com ([209.132.183.28]:3553 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750930Ab2A3KrO convert rfc822-to-8bit (ORCPT ); Mon, 30 Jan 2012 05:47:14 -0500 Content-Disposition: inline In-Reply-To: <4F267254.7040900@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, Jan 30, 2012 at 11:35:00AM +0100, Kevin Wolf wrote: > Am 30.01.2012 09:55, schrieb Gleb Natapov: > > On Mon, Jan 30, 2012 at 09:48:33AM +0100, Kevin Wolf wrote: > >> Am 27.01.2012 20:52, schrieb Gleb Natapov: > >>> On Fri, Jan 27, 2012 at 08:23:33PM +0100, Kevin Wolf wrote: > >>>> I believe this should work with both VMX and SVM now. Gleb, J=C3= =B6rg, can one of > >>>> you test this with SVM? I did some testing on my buggy processor= and it looks > >>>> as good as it gets, but it would be better if you could confirm. > >>>> > >>> You forgot to set cpl to 3 in vmcb in svm_set_rflags() when vm86 = is enabled, no? > >> > >> SVM updates the CPL when the segment selector for CS is loaded. Fr= om a > >> svm.c POV, segment selectors are updated immediately after set_rfl= ags, > >> so it wouldn't really make a difference to do it twice. > >> > > It is too subtle to rely on that. The fact is that checking cpl aft= er > > set_rflags provides incorrect value. This better be fixed. >=20 > Depends on what value you consider to be correct between reloading > eflags and reloading cs. I think it's logical and more consistent to = say > that CPL only changes when cs is reloaded, but you could argue that i= t's > effective with the reload of rflags. It doesn't make a difference to > guests, so we can decide to choose whatever we like. >=20 > Depending on what we decide on (Gleb and I disagree on this, so more > input would be helpful), either VMX or SVM need a cleanup. I think it > can be done independent from and on top of this fix. >=20 I think you made my point (that cpl in svm should be updated on rflags update) by pointing me to this part of the spec: The processor tests the VM flag under three general conditions: =E2=80=A2 When loading segment registers, to determine whether to use 8= 086-style address translation. =E2=80=A2 When decoding instructions, to determine which instructions a= re not supported in virtual-8086 mode and which instructions are sensitive to IOPL. =E2=80=A2 When checking privileged instructions, on page accesses, or w= hen performing other permission checks. (Virtual-8086 mode always executes at CPL 3= =2E) Bullet 3 clearly proves it. =46urthermore task switch loads eflags and segment selector at stage 12= =2E After that CPU runs on a new task, but since segment descriptors are still not loaded CS dpl is not updated yet, but task is in CPL3 already= =2E > > BTW does load_state_from_tss16() need the same fix? >=20 > The manual says "Do not use a 16-bit TSS to implement a virtual-8086 > task." Actually, I don't think you could do that, even if you wanted, > with a 16-bit flags field. >=20 Yes. May be there are other reasons to update flags earlier like spec specifies, but I can think of any. Will fix them when we find them. -- Gleb.