Received: by 10.223.164.202 with SMTP id h10csp22656wrb; Tue, 14 Nov 2017 16:42:53 -0800 (PST) X-Google-Smtp-Source: AGs4zMZLSg2FV1mNMFe/r2Y2CUuSumMst467RtHWpjAZpUlhSKFw+y9A6cFrTqJ7ftuhH43O+DFf X-Received: by 10.98.72.18 with SMTP id v18mr15330605pfa.232.1510706573157; Tue, 14 Nov 2017 16:42:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510706573; cv=none; d=google.com; s=arc-20160816; b=xSpRAsMtJWZuVSLufnGyK9neGw5T3QK1AYtrmujGqISAAE7JWqENOQO8o1adQODoc4 rhYl7JCgll2CDTaZl5mGURzjSyiI9JokfG7jt4C4jSfj+8rUC7WzLa3FezlHva6Yekya NRTKp3GLkNcm9uQfX+CfB91FZWkIVdjxoVWrKuNW+2DWSdl4YC+Po6d8d+7/D0+qECcT h/jEaUkf/A9OwiWmqjRX4pDNfl6giSA4NKAPGLK5kgjntyEW/H4CUNDEgALqAFvtP8l+ oMIvZy54fNmCPNXs+U5qXUZpUSdDPCnT7Qp43wi38K6dWnH0bQrhX3lK/vQR1YJxnK+m L3lw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=uB0uuP4t+iDOKyjZ3NA/fX2A8a0xjMgzSr/u3nRcvec=; b=tAWVInH9Yv2y/tbICLG8Hi5fSiLLl5k45z2E4IcHVdVnc78HB8n2jxs9fKDnOxAM0Y /kDrPe0D1ZJe3VJSLx20oIyonOO/m8av+fOuFUCiU6kSo7mW98FnCKR9/pbGPwanSESQ Fbub3K3FvVMaybcRT4vOqDot4QDmHkEfVzV2vX7MlEpu5aPQ0xqV1KHddJjfupP3ssE8 /+kb0Sh0IWJKPIt2NDK0Ja5H/O7wDvcnbvVBQuvIEp5DxKJTbjUN4xL9Tlh8YsHS7KSN 1YUJEPc1kuStiVzljLrdRZtGK7NIhzLWttyBu52Nlgj9cx9AteoM8zIxZTkwQw7EGqbT mjNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=JtB5K5lj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f30si17426694plf.680.2017.11.14.16.42.40; Tue, 14 Nov 2017 16:42:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=JtB5K5lj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757528AbdKOAlv (ORCPT + 87 others); Tue, 14 Nov 2017 19:41:51 -0500 Received: from mail-oi0-f68.google.com ([209.85.218.68]:54205 "EHLO mail-oi0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757479AbdKOAlW (ORCPT ); Tue, 14 Nov 2017 19:41:22 -0500 Received: by mail-oi0-f68.google.com with SMTP id h6so14955969oia.10; Tue, 14 Nov 2017 16:41:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=uB0uuP4t+iDOKyjZ3NA/fX2A8a0xjMgzSr/u3nRcvec=; b=JtB5K5ljo0lOCFRo0WS2UuSdn+wysikdr1Lg2HAijCxWfcjz0epU9ewgN65wSDKNYP yJzVitGuVIPHrSO71h1qX/w59bn++IRFP/egrQ0sF0D+fU64lljJ+4hinEx/vn+QnXo5 XQwnTZpFuws7zCm9NaWNIA8NlpPg+20aNmBu96bV8hWzeu+IM99b4j+ZrmWc4XHXtNt9 uMV9rmbuibcsCtZ06/Vz5xQpWn8Mk9/njLMIi2zvnFAGEFh+jyq0FnGpuKz7H59lgkz3 SZ/QtMIQH34y8b6gnNDPYCff3s1jIWUWLwHPnNgUzc87uiOP4icFU09AM2KOaVSiU65F yZ2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=uB0uuP4t+iDOKyjZ3NA/fX2A8a0xjMgzSr/u3nRcvec=; b=l6dvpp8dOIRWvbSX1iooMinoAx5io+kLI9ShhB+GqcUcVgr3MnCdBV4nTc4KDxTExQ PRnVSsiXqu36G9w334d+Q2s7TJ1Ez0vrGbQvmbLhE9O4MWaHbKnqvheb/9cu+KcfeT/l hsRT/YsSphKgRqpr6Qopdg0UJeH6g3La/sUg5ABggbZHQppyTLhwpNcTeq8BRp6pX0QL GkDPutYYd01QwmNlaYn64Dxj2/uYZ2kwkmdm/F7stxgNESlLOx0Dc18mP+MKxdKjlxfL C6ThhWRpoXA8LoZRTmjp5yZEUHj560XsjmOS7bR/s+mVwCluLjKRaFkdW4jAdM1BtqxZ Wk0Q== X-Gm-Message-State: AJaThX6AyQm1A4p/t7CneBZIDA+ek7kQaVoQbCzd10asYX1s013vqYro t2480runSC9oLf5YQk4i7Ri/lYsMlhGLi5lReyc= X-Received: by 10.202.205.193 with SMTP id d184mr8322572oig.333.1510706481445; Tue, 14 Nov 2017 16:41:21 -0800 (PST) MIME-Version: 1.0 Received: by 10.74.53.27 with HTTP; Tue, 14 Nov 2017 16:41:21 -0800 (PST) In-Reply-To: <1510584031-36240-4-git-send-email-pbonzini@redhat.com> References: <1510584031-36240-1-git-send-email-pbonzini@redhat.com> <1510584031-36240-4-git-send-email-pbonzini@redhat.com> From: Wanpeng Li Date: Wed, 15 Nov 2017 08:41:21 +0800 Message-ID: Subject: Re: [PATCH 3/5] KVM: x86: emulate sldt and str To: Paolo Bonzini Cc: "linux-kernel@vger.kernel.org" , kvm , Radim Krcmar Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2017-11-13 22:40 GMT+08:00 Paolo Bonzini : > These are needed to handle the descriptor table vmexits when emulating > UMIP. > > Signed-off-by: Paolo Bonzini Reviewed-by: Wanpeng Li > --- > arch/x86/kvm/emulate.c | 32 ++++++++++++++++++++++++++------ > 1 file changed, 26 insertions(+), 6 deletions(-) > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index d27339332ac8..da2c5590240a 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -3638,17 +3638,27 @@ static int em_rdmsr(struct x86_emulate_ctxt *ctxt) > return X86EMUL_CONTINUE; > } > > -static int em_mov_rm_sreg(struct x86_emulate_ctxt *ctxt) > +static int em_store_sreg(struct x86_emulate_ctxt *ctxt, int segment) > { > - if (ctxt->modrm_reg > VCPU_SREG_GS) > - return emulate_ud(ctxt); > + if (segment > VCPU_SREG_GS && > + (ctxt->ops->get_cr(ctxt, 4) & X86_CR4_UMIP) && > + ctxt->ops->cpl(ctxt) > 0) > + return emulate_gp(ctxt, 0); > > - ctxt->dst.val = get_segment_selector(ctxt, ctxt->modrm_reg); > + ctxt->dst.val = get_segment_selector(ctxt, segment); > if (ctxt->dst.bytes == 4 && ctxt->dst.type == OP_MEM) > ctxt->dst.bytes = 2; > return X86EMUL_CONTINUE; > } > > +static int em_mov_rm_sreg(struct x86_emulate_ctxt *ctxt) > +{ > + if (ctxt->modrm_reg > VCPU_SREG_GS) > + return emulate_ud(ctxt); > + > + return em_store_sreg(ctxt, ctxt->modrm_reg); > +} > + > static int em_mov_sreg_rm(struct x86_emulate_ctxt *ctxt) > { > u16 sel = ctxt->src.val; > @@ -3664,6 +3674,11 @@ static int em_mov_sreg_rm(struct x86_emulate_ctxt *ctxt) > return load_segment_descriptor(ctxt, sel, ctxt->modrm_reg); > } > > +static int em_sldt(struct x86_emulate_ctxt *ctxt) > +{ > + return em_store_sreg(ctxt, VCPU_SREG_LDTR); > +} > + > static int em_lldt(struct x86_emulate_ctxt *ctxt) > { > u16 sel = ctxt->src.val; > @@ -3673,6 +3688,11 @@ static int em_lldt(struct x86_emulate_ctxt *ctxt) > return load_segment_descriptor(ctxt, sel, VCPU_SREG_LDTR); > } > > +static int em_str(struct x86_emulate_ctxt *ctxt) > +{ > + return em_store_sreg(ctxt, VCPU_SREG_TR); > +} > + > static int em_ltr(struct x86_emulate_ctxt *ctxt) > { > u16 sel = ctxt->src.val; > @@ -4365,8 +4385,8 @@ static int check_perm_out(struct x86_emulate_ctxt *ctxt) > }; > > static const struct opcode group6[] = { > - DI(Prot | DstMem, sldt), > - DI(Prot | DstMem, str), > + II(Prot | DstMem, em_sldt, sldt), > + II(Prot | DstMem, em_str, str), > II(Prot | Priv | SrcMem16, em_lldt, lldt), > II(Prot | Priv | SrcMem16, em_ltr, ltr), > N, N, N, N, > -- > 1.8.3.1 > > From 1583962355449209888@xxx Mon Nov 13 14:43:36 +0000 2017 X-GM-THRID: 1583962355449209888 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread