From patchwork Fri Oct 20 14:22:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 10020329 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1766C60234 for ; Fri, 20 Oct 2017 14:24:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 030F628C7E for ; Fri, 20 Oct 2017 14:24:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E930628D48; Fri, 20 Oct 2017 14:24:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A1B2928C7E for ; Fri, 20 Oct 2017 14:24:57 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e5YCU-0001D7-MG; Fri, 20 Oct 2017 14:23:02 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e5YCT-0001Cs-PM for xen-devel@lists.xenproject.org; Fri, 20 Oct 2017 14:23:01 +0000 Received: from [85.158.143.35] by server-8.bemta-6.messagelabs.com id 06/8A-13910-5C60AE95; Fri, 20 Oct 2017 14:23:01 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrGIsWRWlGSWpSXmKPExsXS6fjDS/cI26t Ig6MnVS2+b5nM5MDocfjDFZYAxijWzLyk/IoE1oz+2QeYC56zVxxafIatgbGbrYuRk0NIIE+i 699HRhCbV8BO4tryPSwgtoSAocTphTfBbBYBVYlbTZOYQGw2AXWJtmfbWbsYOThEBAwkzh1NA gkzC4RLfH/UCzZSWMBSYvaeOewQ4+0k/l2cD2ZzCthLTPg7ix2klVdAUOLvDmGIVi2Jh79usU DY2hLLFr5mBilhFpCWWP6PYwIj3yyEhllIGmYhaZiF0LCAkWUVo0ZxalFZapGusYFeUlFmekZ JbmJmjq6hgZlebmpxcWJ6ak5iUrFecn7uJkZg6DEAwQ7Gv2sDDzFKcjApifIGVr6MFOJLyk+p zEgszogvKs1JLT7EKMPBoSTBe5n1VaSQYFFqempFWmYOMApg0hIcPEoivIkgad7igsTc4sx0i NQpRmOOGw+v/2Hi6Lh59w+TEEtefl6qlDhvMUipAEhpRmke3CBYdF5ilJUS5mUEOk2IpyC1KD ezBFX+FaM4B6OSMO8WkCk8mXklcPteAZ3CBHQKu/0LkFNKEhFSUg2MTCuyDPbOEUrqvZMaFtH QEK7HO22hUPsBVsckzV/6TM/ec02R2vVGUOnPEQuZGdHri8teLe/vM/67j48p8djiKTvms4RV rk6ea/HlrXZsuWFJ1wGPGTnrA9pzTr4x3p9ZfD1H3V/C+Kf8OyPGnRo7Jkdkf88wfBD+ylLCt COAqVbvYObr5ceUWIozEg21mIuKEwEuQl+nyQIAAA== X-Env-Sender: JBeulich@suse.com X-Msg-Ref: server-2.tower-21.messagelabs.com!1508509378!64226987!1 X-Originating-IP: [137.65.248.74] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 53439 invoked from network); 20 Oct 2017 14:23:00 -0000 Received: from prv-mh.provo.novell.com (HELO prv-mh.provo.novell.com) (137.65.248.74) by server-2.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 20 Oct 2017 14:23:00 -0000 Received: from INET-PRV-MTA by prv-mh.provo.novell.com with Novell_GroupWise; Fri, 20 Oct 2017 08:22:57 -0600 Message-Id: <59EA22E10200007800188C16@prv-mh.provo.novell.com> X-Mailer: Novell GroupWise Internet Agent 14.2.2 Date: Fri, 20 Oct 2017 08:22:57 -0600 From: "Jan Beulich" To: "xen-devel" References: <59EA201F0200007800188BF5@prv-mh.provo.novell.com> In-Reply-To: <59EA201F0200007800188BF5@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Disposition: inline Cc: Andrew Cooper , Julien Grall Subject: [Xen-devel] [PATCH 1/3] x86: fix GS-base-dirty determination X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP load_segments() writes the two MSRs in their "canonical" positions (GS_BASE for the user base, SHADOW_GS_BASE for the kernel one) and uses SWAPGS to switch them around if the incoming vCPU is in kernel mode. In order to not leave a stale kernel address in GS_BASE when the incoming guest is in user mode, the check on the outgoing vCPU needs to be dependent upon the mode it is currently in, rather than blindly looking at the user base. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1479,7 +1479,8 @@ static void save_segments(struct vcpu *v if ( regs->gs & ~3 ) v->arch.pv_vcpu.gs_base_user = 0; } - if ( v->arch.pv_vcpu.gs_base_user ) + if ( v->arch.flags & TF_kernel_mode ? v->arch.pv_vcpu.gs_base_kernel + : v->arch.pv_vcpu.gs_base_user ) dirty_segment_mask |= DIRTY_GS_BASE_USER; this_cpu(dirty_segment_mask) = dirty_segment_mask;