From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EAEB9C433E0 for ; Fri, 26 Feb 2021 19:07:22 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A739264EFA for ; Fri, 26 Feb 2021 19:07:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A739264EFA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=5i7Otso1iY/n8V8gvylqZzFctLIeiVB2RsgpQmNLiv8=; b=XTZ4jU16Md+1CmIMc5TNi+yf0 x+cYWkhSq2gnVztd+J4sa/UlAnW/XqxY7Z5HJlV1u0+Mj7iOW/2x9/KYKDoMvQqvrHOIFsmA3z04Z ZPCxh8rClR1FE43VMrF+vL6AH6ZlZfJpHiqz8r5qGeh1z3YBjN8oliugew/KLp1NzwGx2AWDVjVsT Wq2AEi6RdlQBsAEYsexwIEW5FdpBYtGuBEVD3qmjDmabIcYqQp8V1+wCoDU9Hxw5cegG2HoagFRm4 EPpZHXxkZ6iNbSKGXqlZTp5z7ayhwNMTBxAq0uMRo8IZnG1I/dNRiXGBuYumkiLcusfhSE/BTRA4T y1R5DxqDQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lFiR7-0006aZ-BF; Fri, 26 Feb 2021 19:06:01 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1lFiR3-0006aC-J2 for linux-arm-kernel@lists.infradead.org; Fri, 26 Feb 2021 19:05:58 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 55E9064EFA; Fri, 26 Feb 2021 19:05:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1614366356; bh=/b4ys3WDojeIMBKFZ7oN//rLP0M5lRr285LlWdBs8ac=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=s3ravjhZxvr4pz1VHNtLhrSEQe4D3Re+vFYgqiVPcatv466Z9+sqF9VfGHNtF36++ MItka4aOe2aLmU70bvuQyV59TVodmrvgryGZSZ87AsUxUzbKm6urMcIAlUuiIA961u XJB8fQcuH5psJuSrwCAaah2U5ZPoUOxGKnGUz5ErbFaCK7sbR4XwL4M6qs6SPchR+R hkmjOWhy0RYK0cj8I0JPwGlSl1ndSnVXckCmYyOJeDBiIvmVM1Mw08w9hjoP9dLkE6 9IygiPsudwaoJOXWp7sh4wDmwGyJvipOY5f3ea+IMkoDutSAeFhvEXfMcQQ8JIrHMW kl6ywOtrY5J/A== Date: Fri, 26 Feb 2021 19:05:52 +0000 From: Will Deacon To: Marc Zyngier Subject: Re: [PATCH] KVM: arm64: Avoid corrupting vCPU context register in guest exit Message-ID: <20210226190551.GA14700@willie-the-truck> References: <20210226181211.14542-1-will@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210226_140557_742944_D34F7670 X-CRM114-Status: GOOD ( 22.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Quentin Perret , stable@vger.kernel.org, Andrew Scull , kernel-team@android.com, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Feb 26, 2021 at 06:35:42PM +0000, Marc Zyngier wrote: > On 2021-02-26 18:12, Will Deacon wrote: > > Commit 7db21530479f ("KVM: arm64: Restore hyp when panicking in guest > > context") tracks the currently running vCPU, clearing the pointer to > > NULL on exit from a guest. > > > > Unfortunately, the use of 'set_loaded_vcpu' clobbers x1 to point at the > > kvm_hyp_ctxt instead of the vCPU context, causing the subsequent RAS > > code to go off into the weeds when it saves the DISR assuming that the > > CPU context is embedded in a struct vCPU. > > > > Leave x1 alone and use x3 as a temporary register instead when clearing > > the vCPU on the guest exit path. > > > > Cc: Marc Zyngier > > Cc: Andrew Scull > > Cc: > > Fixes: 7db21530479f ("KVM: arm64: Restore hyp when panicking in guest > > context") > > Suggested-by: Quentin Perret > > Signed-off-by: Will Deacon > > --- > > > > This was pretty awful to debug! > > > > arch/arm64/kvm/hyp/entry.S | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/arch/arm64/kvm/hyp/entry.S b/arch/arm64/kvm/hyp/entry.S > > index b0afad7a99c6..0c66a1d408fd 100644 > > --- a/arch/arm64/kvm/hyp/entry.S > > +++ b/arch/arm64/kvm/hyp/entry.S > > @@ -146,7 +146,7 @@ SYM_INNER_LABEL(__guest_exit, SYM_L_GLOBAL) > > // Now restore the hyp regs > > restore_callee_saved_regs x2 > > > > - set_loaded_vcpu xzr, x1, x2 > > + set_loaded_vcpu xzr, x2, x3 > > > > alternative_if ARM64_HAS_RAS_EXTN > > // If we have the RAS extensions we can consume a pending error > > Grmbl... How comes we have never seen that for the past 5 months, > including on CPUs that implement RAS? I think it's probably a combination of (a) not having a massive testing community (b) not having tools that would scream about this (e.g. I don't think you could detect this with KASAN) and (c) the nature of the corruption being mostly benign in practice. We found it in pKVM development because it landed on the vtcr we were restoring when coming out of suspend, which then meant the page-table code went wonky on the next stage-2 fault because it got the wrong start level and kept returning -EAGAIN because it thought a table was a leaf. So even then, the failure mode is horribly subtle. Will _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel