Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4247038ybz; Mon, 20 Apr 2020 19:16:49 -0700 (PDT) X-Google-Smtp-Source: APiQypKpF3J7Opz9PUipts5Vn5C/lFzqk7I86Cg0LoWDcKYC2H1umvGYj3sFUS6DidWscAkyuIMx X-Received: by 2002:a50:f058:: with SMTP id u24mr16072608edl.171.1587435409646; Mon, 20 Apr 2020 19:16:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587435409; cv=none; d=google.com; s=arc-20160816; b=wbyEOJl4he0dT3/0Tpr8O7AEHhHbIgUilJl+sLRiAwBvtLwtCSGj9+unyuisYE9w8R TPFndHdtCWUjYsj32WbSNn6kmdo31AAIXK19PzlfHJcGwpZ7ujYGrbRvQJxKJDqcJvke 64puU6Vzpi2hvWhRxuNKeXP9UvtC1mEny+MplO0sJvOa3GCHsDuNir86oSouzrog/d5c g7gOC+/LjFwrzcoz735ju+fZw3s4fTFOLQyCTs9s7xyJ0tRs7jmzC+pOW6iFHumC0XEl whAhF2G8z1856p57iFbnnw8estoOYD+HUM5dDL1jMgAxGGidGfnctVyzYAAnpzFwATe2 xxsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=Kugk+73vmOylC3TFtzHwjlOoaJ/Fe5NzWOKKOj4AXU4=; b=pYPapbNYy72ipp6vGJXsVyMUrk1J7BSUDF8FukFGKQ1RFyk6+u2zpBIRJH1vp9RLy6 Gfmntq5AyvWyHA72FaxkHiyeqGsEcb51B0Jt3SYsFvYavWqJEq0Rt3Jf7PnSOfARfUdX c3tImMc8ckAHXOOxyZQuMLSORsVguMOw5Qx7QG8wVcZciTvi/ayaPTxVtqzJEA1aLqIC c9ww3m+twh0HfbS33fy3qW3oD8fWkPnUTM0MzmPGaExUQrWDBizPL0PuHu3CcY+OcBXJ LEciAjkED6bxdYyVr+Fxm5PnZQVVo3opG+lSWphFE3rUXfb0jfbLeWpp7VjgF8Jkmwe7 jitA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=A3eUGHpW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t21si769179edq.413.2020.04.20.19.16.27; Mon, 20 Apr 2020 19:16:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=A3eUGHpW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727019AbgDUCPR (ORCPT + 99 others); Mon, 20 Apr 2020 22:15:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48258 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726949AbgDUCPN (ORCPT ); Mon, 20 Apr 2020 22:15:13 -0400 Received: from mail-ua1-x94a.google.com (mail-ua1-x94a.google.com [IPv6:2607:f8b0:4864:20::94a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CCDB1C061A0E for ; Mon, 20 Apr 2020 19:15:12 -0700 (PDT) Received: by mail-ua1-x94a.google.com with SMTP id 59so5808544uaw.6 for ; Mon, 20 Apr 2020 19:15:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=Kugk+73vmOylC3TFtzHwjlOoaJ/Fe5NzWOKKOj4AXU4=; b=A3eUGHpWTDDbA9s0u0Pa1U4lp6c8kqvnkNiIgHcmXPbwKyAV8mZGRrvfIBkdRFVvlB huFyTMvLXJ5vZ9Pt8UjyM5inCgz9Q+HDgcbwi5pfJZMSUOFpy9/vOLihZhGM91p/itfO ikNnJVMxOzJAP+BM9TwXB/moQxWelNuAakb/gTrj/GThpfpNxULF5fX2CohJGwxYkecr yKdphVmGKjZMJdMT66biopCYN0NguDCRArqBA6+mk0YgzUv4ofvoKIWWOkKYiueuV+oR 9cLJI8S/4Fqb6r0EOAvWiwOrpYGQitb5mwprwYNCq2GLK2Uo8aYpmOaRzW3sSs5zaA6L 4hJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=Kugk+73vmOylC3TFtzHwjlOoaJ/Fe5NzWOKKOj4AXU4=; b=Rn+B1MeNnGU2VeuP0XDioyOEySqWBLTW/OU4fmwsLs85JE7tQnb7ToenyaINz8cVCt aG3j2Z5T+7CFlc69TZK6uirksgaMxLp3uK0vbRqq8O272fyg70C2h0Hynwb80fE4zp+1 MZ44uOuByCxHQMf9x4RxS/SPEC8NtyMefzVYpKPJX/jqmDF0/uDp6fjDXdOwhQm5Zi3B ltZx/nQqI3uAKHcdy5TWPOvvvNTv2TNlOD1wG1RhMB+RTLfIgYH35nqtFOwWV52TzlmY ePR5UhglYE97krMm6abm9qW+KBP38gpHSmGQ07v+7dHPEiEf3iNkyehanxoCFB5cFW3K 40pQ== X-Gm-Message-State: AGi0PuY3Pq6pYLJJxS5wwjWbPATNlNeo08oX029ncHtxBUqiuGTHpycw BpYrhUpfsA9xjDB0nY7Rbi/C2kEDsLetgnYPZJc= X-Received: by 2002:ab0:15f0:: with SMTP id j45mr10353225uae.16.1587435311960; Mon, 20 Apr 2020 19:15:11 -0700 (PDT) Date: Mon, 20 Apr 2020 19:14:47 -0700 In-Reply-To: <20200421021453.198187-1-samitolvanen@google.com> Message-Id: <20200421021453.198187-7-samitolvanen@google.com> Mime-Version: 1.0 References: <20191018161033.261971-1-samitolvanen@google.com> <20200421021453.198187-1-samitolvanen@google.com> X-Mailer: git-send-email 2.26.1.301.g55bc3eb7cb9-goog Subject: [PATCH v12 06/12] arm64: preserve x18 when CPU is suspended From: Sami Tolvanen To: Will Deacon , Catalin Marinas , James Morse , Steven Rostedt , Ard Biesheuvel , Mark Rutland , Masahiro Yamada , Michal Marek , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot Cc: Dave Martin , Kees Cook , Laura Abbott , Marc Zyngier , Masami Hiramatsu , Nick Desaulniers , Jann Horn , Miguel Ojeda , clang-built-linux@googlegroups.com, kernel-hardening@lists.openwall.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Sami Tolvanen 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 Don't lose the current task's shadow stack when the CPU is suspended. Signed-off-by: Sami Tolvanen Reviewed-by: Nick Desaulniers Reviewed-by: Kees Cook Reviewed-by: Mark Rutland Acked-by: Will Deacon --- arch/arm64/include/asm/suspend.h | 2 +- arch/arm64/mm/proc.S | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/suspend.h b/arch/arm64/include/asm/suspend.h index 8939c87c4dce..0cde2f473971 100644 --- a/arch/arm64/include/asm/suspend.h +++ b/arch/arm64/include/asm/suspend.h @@ -2,7 +2,7 @@ #ifndef __ASM_SUSPEND_H #define __ASM_SUSPEND_H -#define NR_CTX_REGS 12 +#define NR_CTX_REGS 13 #define NR_CALLEE_SAVED_REGS 12 /* diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S index 197a9ba2d5ea..ed15be0f8103 100644 --- a/arch/arm64/mm/proc.S +++ b/arch/arm64/mm/proc.S @@ -58,6 +58,8 @@ * cpu_do_suspend - save CPU registers context * * x0: virtual address of context pointer + * + * This must be kept in sync with struct cpu_suspend_ctx in . */ SYM_FUNC_START(cpu_do_suspend) mrs x2, tpidr_el0 @@ -82,6 +84,11 @@ alternative_endif stp x8, x9, [x0, #48] stp x10, x11, [x0, #64] stp x12, x13, [x0, #80] + /* + * Save x18 as it may be used as a platform register, e.g. by shadow + * call stack. + */ + str x18, [x0, #96] ret SYM_FUNC_END(cpu_do_suspend) @@ -98,6 +105,13 @@ SYM_FUNC_START(cpu_do_resume) ldp x9, x10, [x0, #48] ldp x11, x12, [x0, #64] ldp x13, x14, [x0, #80] + /* + * Restore x18, as it may be used as a platform register, and clear + * the buffer to minimize the risk of exposure when used for shadow + * call stack. + */ + ldr x18, [x0, #96] + str xzr, [x0, #96] msr tpidr_el0, x2 msr tpidrro_el0, x3 msr contextidr_el1, x4 -- 2.26.1.301.g55bc3eb7cb9-goog