From patchwork Wed Apr 29 06:56:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1279016 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49BqCg4y1lz9sSl for ; Wed, 29 Apr 2020 17:00:31 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=jtnNbY/j; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49BqCd1LyMzDqSC for ; Wed, 29 Apr 2020 17:00:29 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::1043; helo=mail-pj1-x1043.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=jtnNbY/j; dkim-atps=neutral Received: from mail-pj1-x1043.google.com (mail-pj1-x1043.google.com [IPv6:2607:f8b0:4864:20::1043]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 49Bq7r1JC7zDqNt for ; Wed, 29 Apr 2020 16:57:11 +1000 (AEST) Received: by mail-pj1-x1043.google.com with SMTP id hi11so394746pjb.3 for ; Tue, 28 Apr 2020 23:57:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rl/a8Tgu/fTx7PIQlRO+k5H/qjF2hwZBlTIIEOL9peY=; b=jtnNbY/jm1grs2ZEN6KRCjZbQFcOIx4WDqrZKanEDWp6oOQaNX7TDMB4sSq2rCt8o1 z8hJatWqQj5j6cGN2ZAiO3+Hx+zUsI0/kYCZqSGmdkk5/w+OuTpf0yRH9+td3IOXtpVh y2WI76c/M6IOCVc2EvF1jPe3SH7ybFur7VGK56TRrIMaG04pYwLW8d2QMY6qbxftHBxT pXOBNcB2VehCbOsRWHgpXUmacviV/vT5Zw2KNbnn3/DBWQ/QuiQVl3vq5JKClg6R6ByD 1SzjXPvMrp1nzuQWjoiWXZKZikWYylDUQoH6bRYSoQJMSEJTSdt18l+rNgQY+EgJAM7i 8uLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rl/a8Tgu/fTx7PIQlRO+k5H/qjF2hwZBlTIIEOL9peY=; b=LJq5+kh1XwzJ05D/Kcc4CHKHSrNvVdQNMusDgKGm3JPrrTmtEHJBNoh4KMBA1PSvLp PatviVz4mHNW1N2AlNHf+5N+cvLfStRbVF0XCclMhFezQfO6PIUChsPMd3WU1JaggvYc EXqtRDMCR/6QnPUaAVPlb54tepXTtILbkWEYTRJff3OZT//mVuxbaVPI47PvZLcUXOnt tmdBzHDefm1tq1/r07DzOvXmXE0CRKTQr8J42SrwLh6yWlpOd9TS0ENAF8I8oz5YBEAL /3QucoISbLXcqVp/wwdZeOOJhtdyfsatUCYtJPpcAg/4Pji4t0XPfKBg8rHCguzZuQP7 P4WQ== X-Gm-Message-State: AGi0Puaer4ukNqFOpQIl6iuXasP1g3zLAf5awCQQj0Eh39JBZC8c4OJz to46HkmSlpPRVnJyqGobtDkeoYWR X-Google-Smtp-Source: APiQypJqUGZ/N5ROgy1fMXOnSWdhteAqGo/gPPqH28FzQf0kWiX3imbC6EUDOsIgOO8LOGiG8yWvvA== X-Received: by 2002:a17:90a:20a8:: with SMTP id f37mr1437381pjg.148.1588143429521; Tue, 28 Apr 2020 23:57:09 -0700 (PDT) Received: from bobo.ozlabs.ibm.com ([203.220.177.17]) by smtp.gmail.com with ESMTPSA id a26sm254660pgd.68.2020.04.28.23.57.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2020 23:57:09 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 1/6] powerpc/64/kuap: move kuap checks out of MSR[RI]=0 regions of exit code Date: Wed, 29 Apr 2020 16:56:49 +1000 Message-Id: <20200429065654.1677541-2-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200429065654.1677541-1-npiggin@gmail.com> References: <20200429065654.1677541-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Any kind of WARN causes a program check that will crash with unrecoverable exception if it occurs when RI is clear. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/syscall_64.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/kernel/syscall_64.c b/arch/powerpc/kernel/syscall_64.c index 8f7e268f3294..a37c7717424f 100644 --- a/arch/powerpc/kernel/syscall_64.c +++ b/arch/powerpc/kernel/syscall_64.c @@ -35,6 +35,8 @@ notrace long system_call_exception(long r3, long r4, long r5, BUG_ON(!FULL_REGS(regs)); BUG_ON(regs->softe != IRQS_ENABLED); + kuap_check_amr(); + account_cpu_user_entry(); #ifdef CONFIG_PPC_SPLPAR @@ -47,8 +49,6 @@ notrace long system_call_exception(long r3, long r4, long r5, } #endif - kuap_check_amr(); - /* * This is not required for the syscall exit path, but makes the * stack frame look nicer. If this was initialised in the first stack @@ -142,6 +142,8 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, unsigned long ti_flags; unsigned long ret = 0; + kuap_check_amr(); + regs->result = r3; /* Check whether the syscall is issued inside a restartable sequence */ @@ -218,8 +220,6 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, local_paca->tm_scratch = regs->msr; #endif - kuap_check_amr(); - account_cpu_user_exit(); return ret; @@ -242,6 +242,8 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned BUG_ON(!FULL_REGS(regs)); BUG_ON(regs->softe != IRQS_ENABLED); + kuap_check_amr(); + local_irq_save(flags); again: @@ -298,8 +300,6 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned local_paca->tm_scratch = regs->msr; #endif - kuap_check_amr(); - account_cpu_user_exit(); return ret; @@ -319,6 +319,8 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs, unsign BUG_ON(regs->msr & MSR_PR); BUG_ON(!FULL_REGS(regs)); + kuap_check_amr(); + if (unlikely(*ti_flagsp & _TIF_EMULATE_STACK_STORE)) { clear_bits(_TIF_EMULATE_STACK_STORE, ti_flagsp); ret = 1; From patchwork Wed Apr 29 06:56:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1279018 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49BqGN2xCCz9sSq for ; Wed, 29 Apr 2020 17:02:52 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=cxve3lif; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49BqGM0HzhzDr7J for ; Wed, 29 Apr 2020 17:02:51 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::442; helo=mail-pf1-x442.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=cxve3lif; dkim-atps=neutral Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 49Bq7t5CGfzDq6k for ; Wed, 29 Apr 2020 16:57:14 +1000 (AEST) Received: by mail-pf1-x442.google.com with SMTP id 145so633540pfw.13 for ; Tue, 28 Apr 2020 23:57:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=douANWoQAY+53LUd2V4eLmMeLibzct7GCFfJaY1Bwtw=; b=cxve3lifFyH5eYEa0a4/SLfAa0uwzKMJ4m1NcDm+Mjzb84bGw3omUZQ/8BzpLsPLLq JPXjUIXM9l3W0d7mz69L7K6rVdu8jD3GP6lClC1Ddund/loukHu7fdTYqgnhk5NnruFn Qu/7Klhgw5ly3XxaugTUScYK+H9FnPb9N6jI7eYeSg/GTXFn8/psN7GV9E/zy56/UM+j yJ0K9SkWuHV/bdaBHLquxjnHxi4xHyWXCCHc223Pq/ttEJZu/6eeAlj/Fc4m7Nf3th4U igRkVQOVcgY3+Mk+rPSb85tgVcz04FqRTJV7FkvDLcY8DPNgzboDJDXJEirzraKQMC8v IzaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=douANWoQAY+53LUd2V4eLmMeLibzct7GCFfJaY1Bwtw=; b=lIyXST3bu1NdrB7eEqRoxinYnyQoYA+Psb6CVprwpBW7uTfw2ofR/xY/EQKH5mZmba U3zxyiLW1nnEZlc/IJfVJSkSrWwtZ66FlLZdTfg9p+36kKvXiFedw4IHgKSGhWHeL8a9 rfLxM9ROQGeYOvbOLi03sfpY52S44vcJy7yz2ECyeJXxHjcBKAG3dj5JblRnVBd7cLun y3kb7AwE8wO9GXyVKASZrOvE8+oSIDvu0PSgCZvfY7bwbJNLqGnqwKUtyJ9lWVIPSq31 PMN2TIDJi8VPidJFAhu7DuK/qzQTfM11tctu/Kua6lwI9PtFmMSA+s9P+A5fqMQE9+fI GtPQ== X-Gm-Message-State: AGi0PuZh88Kr27J0TZv3Ff/p7SUNiceNZPPWDbjrgErxIs1QEurCdCLV L0wydJkYXj63wZjO1/lRZ07Fd34J X-Google-Smtp-Source: APiQypJH3+XRFNlTzoqS9bb6IJqYbupqWcJhLQq+D+SldMNfgcEVfR1kVRV7+DZBirrItqFdoxNrRA== X-Received: by 2002:a62:2544:: with SMTP id l65mr15926537pfl.288.1588143432096; Tue, 28 Apr 2020 23:57:12 -0700 (PDT) Received: from bobo.ozlabs.ibm.com ([203.220.177.17]) by smtp.gmail.com with ESMTPSA id a26sm254660pgd.68.2020.04.28.23.57.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2020 23:57:11 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 2/6] powerpc/64s/kuap: kuap_restore missing isync Date: Wed, 29 Apr 2020 16:56:50 +1000 Message-Id: <20200429065654.1677541-3-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200429065654.1677541-1-npiggin@gmail.com> References: <20200429065654.1677541-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Writing the AMR register is documented to require context synchronizing operations before and after, for it to take effect as expected. The kuap restore at interrupt exit time deliberately avoids the isync after the AMR update because it only needs to take effect after the context synchronizing rfid that soon follows. Add a comment for this. The missing isync before the update doesn't have an obvious justification, and seems it could theorietically allow a rogue user access to leak past the AMR update. Add isyncs for these. Signed-off-by: Nicholas Piggin --- arch/powerpc/include/asm/book3s/64/kup-radix.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/include/asm/book3s/64/kup-radix.h b/arch/powerpc/include/asm/book3s/64/kup-radix.h index 3bcef989a35d..8dc5f292b806 100644 --- a/arch/powerpc/include/asm/book3s/64/kup-radix.h +++ b/arch/powerpc/include/asm/book3s/64/kup-radix.h @@ -16,7 +16,9 @@ #ifdef CONFIG_PPC_KUAP BEGIN_MMU_FTR_SECTION_NESTED(67) ld \gpr, STACK_REGS_KUAP(r1) + isync mtspr SPRN_AMR, \gpr + /* No isync required, see kuap_restore_amr() */ END_MMU_FTR_SECTION_NESTED_IFSET(MMU_FTR_RADIX_KUAP, 67) #endif .endm @@ -62,8 +64,15 @@ static inline void kuap_restore_amr(struct pt_regs *regs) { - if (mmu_has_feature(MMU_FTR_RADIX_KUAP)) + if (mmu_has_feature(MMU_FTR_RADIX_KUAP)) { + isync(); mtspr(SPRN_AMR, regs->kuap); + /* + * No isync required here because we are about to rfi + * back to previous context before any user accesses + * would be made, which is a CSI. + */ + } } static inline void kuap_check_amr(void) From patchwork Wed Apr 29 06:56:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1279020 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49BqK35Nwrz9sSb for ; Wed, 29 Apr 2020 17:05:11 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Enz1wZuz; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49BqK31cX4zDr08 for ; Wed, 29 Apr 2020 17:05:11 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::441; helo=mail-pf1-x441.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Enz1wZuz; dkim-atps=neutral Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 49Bq7x48GZzDr5l for ; Wed, 29 Apr 2020 16:57:17 +1000 (AEST) Received: by mail-pf1-x441.google.com with SMTP id x2so649007pfx.7 for ; Tue, 28 Apr 2020 23:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=S+cxMIgNTTorSICTEdGHeu0AzoEwbW1rZkQFx37dE+0=; b=Enz1wZuzZzA+/AGiQrNqYCd0+JN9a8Gh9TfN8X16GuciP6exdqwcZAXfQ8GHUVngCA 9Wb3QI4W0SCF6SN+CFuPfr7JsQaRGPQB3yMjU22AndMXOZgjIEPNda4sgUgWHWi4m7tl OeFAe8EhkqtJ5N0VJ+m0zLGDitDsl4l5NOqSWfbt5QdsCTmVv/2Nal3VUHSDxId2ONyO MbOURstnncnRBp/f9gvl25CFoKGK2byEgHPzbsBqDR8XC9r4LeqNotvvc8nuy/RuamdF RV+VNdvdQUOGBkkeIJDK2PL2C/pGgNDwLmhrDlkfB5330NTyRp6U+Ig9kGRagk4sMXWs XZrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=S+cxMIgNTTorSICTEdGHeu0AzoEwbW1rZkQFx37dE+0=; b=gVCkMtbi0GJ5nJrf2Nt/FWyVzz87gGHyuS1SwKw9cwUKJTJxRfEVFVgfciBtr5YKlp 1YvUvGDP51CDBOLvc6gl3SHFTLRdW7UkYRWDVqWsETrCutlQ1Dw0TyhBtXunmFW11IKM BPnkcb0lc/ajoxwBOLWavggwSf6yfN8Tzx6/hyhEXE0L0hNX/0R6MFxBN2HAYFOaFybc CImmnzHJUmNDugSRk5KCIe9hSaBe/Zl0I9uZmAt4la61b0UKm77X5Xdsq1Asr0LYyIV3 r2ugMB6s6s7LxpxhISVWjVRNQtb5kNNaiQMaFhtl14zKRBW9Xz+sLrswBNBuw0ZuVeNg DMiA== X-Gm-Message-State: AGi0PuYpcXgGvbThMKrya++DdX2+iCfDVgeE5V2GIFck+EkWwupXSWP6 BPYBY4AOAYxwabN7Zh0mt4KZDC2w X-Google-Smtp-Source: APiQypIYw/zDRLp0kW/bHJngKjHcmNrrb5Nulo4qUEaiSPxtKNKbhSDaBEJcZASNRSGI7SgsQZ/thA== X-Received: by 2002:aa7:8f26:: with SMTP id y6mr34458729pfr.36.1588143435068; Tue, 28 Apr 2020 23:57:15 -0700 (PDT) Received: from bobo.ozlabs.ibm.com ([203.220.177.17]) by smtp.gmail.com with ESMTPSA id a26sm254660pgd.68.2020.04.28.23.57.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2020 23:57:14 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 3/6] powerpc/64/kuap: interrupt exit conditionally restore AMR Date: Wed, 29 Apr 2020 16:56:51 +1000 Message-Id: <20200429065654.1677541-4-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200429065654.1677541-1-npiggin@gmail.com> References: <20200429065654.1677541-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" The AMR update is made conditional on AMR actually changing, which should be the less common case on most workloads (though kernel page faults on uaccess could be frequent, this doesn't significantly slow down that case). Signed-off-by: Nicholas Piggin --- .../powerpc/include/asm/book3s/64/kup-radix.h | 36 ++++++++++++++----- arch/powerpc/kernel/syscall_64.c | 14 +++++--- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/64/kup-radix.h b/arch/powerpc/include/asm/book3s/64/kup-radix.h index 8dc5f292b806..ec8970958a26 100644 --- a/arch/powerpc/include/asm/book3s/64/kup-radix.h +++ b/arch/powerpc/include/asm/book3s/64/kup-radix.h @@ -62,19 +62,32 @@ #include #include -static inline void kuap_restore_amr(struct pt_regs *regs) +static inline void kuap_restore_amr(struct pt_regs *regs, unsigned long amr) { if (mmu_has_feature(MMU_FTR_RADIX_KUAP)) { - isync(); - mtspr(SPRN_AMR, regs->kuap); - /* - * No isync required here because we are about to rfi - * back to previous context before any user accesses - * would be made, which is a CSI. - */ + if (unlikely(regs->kuap != amr)) { + isync(); + mtspr(SPRN_AMR, regs->kuap); + /* + * No isync required here because we are about to rfi + * back to previous context before any user accesses + * would be made, which is a CSI. + */ + } } } +static inline unsigned long kuap_get_and_check_amr(void) +{ + if (mmu_has_feature(MMU_FTR_RADIX_KUAP)) { + unsigned long amr = mfspr(SPRN_AMR); + if (IS_ENABLED(CONFIG_PPC_KUAP_DEBUG)) /* kuap_check_amr() */ + WARN_ON_ONCE(amr != AMR_KUAP_BLOCKED); + return amr; + } + return 0; +} + static inline void kuap_check_amr(void) { if (IS_ENABLED(CONFIG_PPC_KUAP_DEBUG) && mmu_has_feature(MMU_FTR_RADIX_KUAP)) @@ -151,13 +164,18 @@ bad_kuap_fault(struct pt_regs *regs, unsigned long address, bool is_write) "Bug: %s fault blocked by AMR!", is_write ? "Write" : "Read"); } #else /* CONFIG_PPC_KUAP */ -static inline void kuap_restore_amr(struct pt_regs *regs) +static inline void kuap_restore_amr(struct pt_regs *regs, unsigned long amr) { } static inline void kuap_check_amr(void) { } + +static inline unsigned long kuap_get_and_check_amr(void) +{ + return 0; +} #endif /* CONFIG_PPC_KUAP */ #endif /* __ASSEMBLY__ */ diff --git a/arch/powerpc/kernel/syscall_64.c b/arch/powerpc/kernel/syscall_64.c index a37c7717424f..edeab10c6888 100644 --- a/arch/powerpc/kernel/syscall_64.c +++ b/arch/powerpc/kernel/syscall_64.c @@ -242,6 +242,10 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned BUG_ON(!FULL_REGS(regs)); BUG_ON(regs->softe != IRQS_ENABLED); + /* + * We don't need to restore AMR on the way back to userspace for KUAP. + * AMR can only have been unlocked if we interrupted the kernel. + */ kuap_check_amr(); local_irq_save(flags); @@ -313,13 +317,14 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs, unsign unsigned long *ti_flagsp = ¤t_thread_info()->flags; unsigned long flags; unsigned long ret = 0; + unsigned long amr; if (IS_ENABLED(CONFIG_PPC_BOOK3S) && unlikely(!(regs->msr & MSR_RI))) unrecoverable_exception(regs); BUG_ON(regs->msr & MSR_PR); BUG_ON(!FULL_REGS(regs)); - kuap_check_amr(); + amr = kuap_get_and_check_amr(); if (unlikely(*ti_flagsp & _TIF_EMULATE_STACK_STORE)) { clear_bits(_TIF_EMULATE_STACK_STORE, ti_flagsp); @@ -367,10 +372,11 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs, unsign #endif /* - * We don't need to restore AMR on the way back to userspace for KUAP. - * The value of AMR only matters while we're in the kernel. + * Don't want to mfspr(SPRN_AMR) here, because this comes after + * mtmsr, which would cause RAW stalls. Hence, we take the AMR value + * from the check above. */ - kuap_restore_amr(regs); + kuap_restore_amr(regs, amr); return ret; } From patchwork Wed Apr 29 06:56:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1279021 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49BqMh5ZcYz9sSb for ; Wed, 29 Apr 2020 17:07:28 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=V5mlLmUT; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49BqMg6P3WzDr5X for ; Wed, 29 Apr 2020 17:07:27 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::441; helo=mail-pf1-x441.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=V5mlLmUT; dkim-atps=neutral Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 49Bq7z6Wr7zDr5D for ; Wed, 29 Apr 2020 16:57:19 +1000 (AEST) Received: by mail-pf1-x441.google.com with SMTP id v63so640669pfb.10 for ; Tue, 28 Apr 2020 23:57:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qLGXGJfB1Kxz4TW1ENW4rnKz/McMbvO4oi+kq2PYQxQ=; b=V5mlLmUT98BhjwGWkawRt8flAEjEevHT2VjRAupfsFJgyhH9hrDmp9M+E7SSZXc5yM VXerhD3fQhfgyioXOWQ5mH4Lvjnkmra487kJov2vTPRUdMuJXOXR3MDsT4epuSnVT8lD 7ppmF6phd/NxkdblL66TtJtfzVVMY/prIFC84T63HPIddAegKkA424N9CBHWy70Agr5k bBD6qiadRVF1fz0Lapr+6Ur6rQdouOwVOKGQhqG4Xwuic20qqG6t0R1DYXeeK7CecYjO 18sxcrtVq4L2lSJMbu39obhZi3bW5Kq9FCi/DBmrJJZmF88K/BrPjmq4Ni2Q7bs5wZUy XimA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qLGXGJfB1Kxz4TW1ENW4rnKz/McMbvO4oi+kq2PYQxQ=; b=O4T7IdXsL9Sap4Ulhd+jRIbbbb1LOKzFp8lJsMqNgz3ECQpIfOt6KbvY5q8dgWgr2u z8KTnXCVAu8IOuSv4e1j5mY4SdqFVdXlFPGR3uei77cmdRNw7OTyJj77w5ClA66fTkDC FmUm4wfVyCnSG5AMxA+WHf64rKZ+xLvk+kvbSz+hvUACutYnv89QsZH6eHdmiJATcG79 qoCLZLuVVkjN3PoS3iCPuPEapsXgCbX+VmoH+f5sbvDSSVnmZ8I7/BalYaGc/C5d1UdD veHirwhyPGxDlZgVQKocrBo0wq+Kf+D94sd2zeHKuCSKCyPPNSfbxybPjiUGonVdsQ7E Uajg== X-Gm-Message-State: AGi0Pua0urru1sQbqpeIj/y9leFWPSMyBqCCPtJVDDIuyp2hLW8dqPMP faXbyHYL7+jGj8QRuKJDtOXvRQ6z X-Google-Smtp-Source: APiQypKVJAhASBwKKQZI0kDPRRpIYMhD8G6ntNufujfzZxpiLG6fcfImR8c1ZsIYnuhDhYg4AS90xQ== X-Received: by 2002:a63:4383:: with SMTP id q125mr29902920pga.27.1588143437470; Tue, 28 Apr 2020 23:57:17 -0700 (PDT) Received: from bobo.ozlabs.ibm.com ([203.220.177.17]) by smtp.gmail.com with ESMTPSA id a26sm254660pgd.68.2020.04.28.23.57.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2020 23:57:17 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 4/6] powerpc/64s/kuap: restore AMR in system reset exception Date: Wed, 29 Apr 2020 16:56:52 +1000 Message-Id: <20200429065654.1677541-5-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200429065654.1677541-1-npiggin@gmail.com> References: <20200429065654.1677541-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" system reset interrupt handler locks AMR and exits with PTION_RESTORE_REGS without restoring AMR. Similarly to the soft-NMI ler, it needs to restore. ed-off-by: Nicholas Piggin --- arch/powerpc/kernel/exceptions-64s.S | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 728ccb0f560c..b0ad930cbae5 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S @@ -971,6 +971,7 @@ EXC_COMMON_BEGIN(system_reset_common) ld r10,SOFTE(r1) stb r10,PACAIRQSOFTMASK(r13) + kuap_restore_amr r10 EXCEPTION_RESTORE_REGS RFI_TO_USER_OR_KERNEL From patchwork Wed Apr 29 06:56:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1279023 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49BqR64kt9z9sSb for ; Wed, 29 Apr 2020 17:10:26 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=C+ziKj5O; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49BqR572xzzDqx6 for ; Wed, 29 Apr 2020 17:10:25 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::1043; helo=mail-pj1-x1043.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=C+ziKj5O; dkim-atps=neutral Received: from mail-pj1-x1043.google.com (mail-pj1-x1043.google.com [IPv6:2607:f8b0:4864:20::1043]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 49Bq8224zWzDr5g for ; Wed, 29 Apr 2020 16:57:22 +1000 (AEST) Received: by mail-pj1-x1043.google.com with SMTP id a31so388168pje.1 for ; Tue, 28 Apr 2020 23:57:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ksOi0UlTGvBxlodsHEXHpbRyloMe1tqnfNzPw/TOXks=; b=C+ziKj5OY22J268CJ5rZeV2D2koQbSRZ9sxSx+eQUjNpXayLSIAR1+eUKrh8zbnfdc nME5V3Nc0tdhBDn9oUCZFfwdvdTeJjJgCrrpdLp00Tetd9M35V50gFRmiDGcqUxDqHqS zlKENccEgETNIOX3FyNbzs9CA8Six+5N9Y0vqDicUyRter2dJTyyuCzul6q9el7Gj5WG qTatw3t6d+UjXUaG/ot4eXOma1UfzM6RpejYf1zLninPBgDOfEUZ8i9630n47PyTOQE1 m1fQKvzg3PYm5TaN08wxss1b3N8xAreRKnUr26HemL/ht31XOLU1yTEP32MVVMgH/mmM 0y5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ksOi0UlTGvBxlodsHEXHpbRyloMe1tqnfNzPw/TOXks=; b=drcrh6DRBSvbLk0jI+a7qUj1V44Xdgw73h98l6T0WsFjHY2hWD8x+7lTvSk0h3wUz1 I97/s6E2YVOhzK/Lr8+GCiNIkum2GMzDFzdg6SfQE7Qk713HcyyFPS2l+17tfvxzOilG cNbGog3T4DDdi6AYvVqsRVhNddyZIUnrXC1fiSD/7M/iSpSorGcXCySJE72SYm+p7x91 Q/m6hz5ctXfDD1oUHLGea7fy5z2TZBZgEDoNeswGLNMJpBOWQnJDiRXQLHXNy7QxncDK HqRq61eNa+qg2H64SaIM9jvhRTIdjK7OIf0wPItpp78H2kiMYazMjsQTk5qgWNnRVENn mfYw== X-Gm-Message-State: AGi0PuboSZdnWZ/+fGcLXGbe/YAi8OCEqLZDQJZxZtUw7vnS3xopcUkT ZvdW4c+UH4B+g42f2Gdi6V4uV0g/ X-Google-Smtp-Source: APiQypLcOYnPnsGrNs8rwYYVnTgKjA8oCXVekT+yka7XdRHUQ2upCtvlutwvi2V6y+p+Tj5fEKV6VA== X-Received: by 2002:a17:902:b20e:: with SMTP id t14mr31798412plr.223.1588143439947; Tue, 28 Apr 2020 23:57:19 -0700 (PDT) Received: from bobo.ozlabs.ibm.com ([203.220.177.17]) by smtp.gmail.com with ESMTPSA id a26sm254660pgd.68.2020.04.28.23.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2020 23:57:19 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 5/6] powerpc/64s/kuap: restore AMR in fast_interrupt_return Date: Wed, 29 Apr 2020 16:56:53 +1000 Message-Id: <20200429065654.1677541-6-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200429065654.1677541-1-npiggin@gmail.com> References: <20200429065654.1677541-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Interrupts that use fast_interrupt_return actually do lock AMR, but they have been ones which tend to come from userspace (or kernel bugs) in radix mode. With kuap on hash, segment interrupts are taken in kernel often, which quickly breaks due to the missing restore. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/entry_64.S | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 9a1e5d636dea..b3c9f15089b6 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -472,15 +472,17 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) #ifdef CONFIG_PPC_BOOK3S /* * If MSR EE/RI was never enabled, IRQs not reconciled, NVGPRs not - * touched, AMR not set, no exit work created, then this can be used. + * touched, no exit work created, then this can be used. */ .balign IFETCH_ALIGN_BYTES .globl fast_interrupt_return fast_interrupt_return: _ASM_NOKPROBE_SYMBOL(fast_interrupt_return) + kuap_check_amr r3, r4 ld r4,_MSR(r1) andi. r0,r4,MSR_PR bne .Lfast_user_interrupt_return + kuap_restore_amr r3 andi. r0,r4,MSR_RI li r3,0 /* 0 return value, no EMULATE_STACK_STORE */ bne+ .Lfast_kernel_interrupt_return From patchwork Wed Apr 29 06:56:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1279025 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49BqV04k0fz9sSq for ; Wed, 29 Apr 2020 17:12:56 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=iSV1SdhK; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49BqTz6Ln3zDr6c for ; Wed, 29 Apr 2020 17:12:55 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::642; helo=mail-pl1-x642.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=iSV1SdhK; dkim-atps=neutral Received: from mail-pl1-x642.google.com (mail-pl1-x642.google.com [IPv6:2607:f8b0:4864:20::642]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 49Bq85419WzDqTp for ; Wed, 29 Apr 2020 16:57:25 +1000 (AEST) Received: by mail-pl1-x642.google.com with SMTP id s10so514710plr.1 for ; Tue, 28 Apr 2020 23:57:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZIGOLdv/hlCS4eMIgjAj5AL156Amme53dxOOAa1xQGk=; b=iSV1SdhK2mOs3uQreaLyzrSNHsFqFC/8BRazlUVJWev8hIt/W+IRU5woWsvLHdFBxN VbUlseIo7zH/RKvWLDe7LAYI+LxxKo3cijm9dsvU3FfP7UjMSMJumLDBGIC6mAzJKWQS CLD9hjjPn/NOgOwdLLtdooE5TmIPgE6QQKrGBSbQrQ+z/XfaE2GCBGgl1jq4UW3F/mN0 K5zvTuSh06DUw+4HtmiAuTQmFjp+nzpQz60bxkPxQiB8YyifHhiGmUVOdXz6S07nKgJO XMLyt+1pTIHRnKvDo0dvrleY4TAs9df7VaQEFwY5hSlu9lUZ81i5V1uJPRGNmhb/Xm4r mqmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZIGOLdv/hlCS4eMIgjAj5AL156Amme53dxOOAa1xQGk=; b=dKD6FN0IGOft5x4Naf4evrC4vyEyp/ktSR+Z81mHuP/9wR5noLCnpdXr3+yRc1PQh+ biGX9bt4PwhYITmKOIFEL0+WUKpdVaLzWoKbk75z0Fg/WTC0d7590x5luPN/Eldhb7Ez Gn726+/NSglCSic77/h49ehZxDw2qOD548pB66q+kGS7Rgx8B62+2OVitEjDXxWOX2o0 NgFrg/y6SVPX0Tpg2E39eqD+Pq2whc9ssaqWbIaDBeNeELZU6FOjMNYK9qyFWfhTwOPU zo1WrFO/BbcNKAKFG3eucqxshuqJTePjCULnIe8IQ6IbRW8yaCgoDsM5EZQIihDaZcjy wAMw== X-Gm-Message-State: AGi0PuZpZpqaC3SBuAHqg2RBkIeIHZeJ+bYueCW791JQvQ37qpnke/yr td0X5Fspv6jg7KVhXm9DZeMua8Cz X-Google-Smtp-Source: APiQypIVYJ3HA53EdAz224hwpUb03TXzAFB7bdl0Sppea8rwIVcvQTL4dXZscKwYTT+EY4opyxSRnw== X-Received: by 2002:a17:90a:2281:: with SMTP id s1mr1481722pjc.68.1588143442536; Tue, 28 Apr 2020 23:57:22 -0700 (PDT) Received: from bobo.ozlabs.ibm.com ([203.220.177.17]) by smtp.gmail.com with ESMTPSA id a26sm254660pgd.68.2020.04.28.23.57.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2020 23:57:22 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 6/6] powerpc/64s/kuap: conditionally restore AMR in kuap_restore_amr asm Date: Wed, 29 Apr 2020 16:56:54 +1000 Message-Id: <20200429065654.1677541-7-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20200429065654.1677541-1-npiggin@gmail.com> References: <20200429065654.1677541-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Similar to the C code change, make the AMR restore conditional on whether the register has changed. Signed-off-by: Nicholas Piggin --- arch/powerpc/include/asm/book3s/64/kup-radix.h | 10 +++++++--- arch/powerpc/kernel/entry_64.S | 8 ++++---- arch/powerpc/kernel/exceptions-64s.S | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/64/kup-radix.h b/arch/powerpc/include/asm/book3s/64/kup-radix.h index ec8970958a26..e82df54f5681 100644 --- a/arch/powerpc/include/asm/book3s/64/kup-radix.h +++ b/arch/powerpc/include/asm/book3s/64/kup-radix.h @@ -12,13 +12,17 @@ #ifdef __ASSEMBLY__ -.macro kuap_restore_amr gpr +.macro kuap_restore_amr gpr1, gpr2 #ifdef CONFIG_PPC_KUAP BEGIN_MMU_FTR_SECTION_NESTED(67) - ld \gpr, STACK_REGS_KUAP(r1) + mfspr \gpr1, SPRN_AMR + ld \gpr2, STACK_REGS_KUAP(r1) + cmpd \gpr1, \gpr2 + beq 998f isync - mtspr SPRN_AMR, \gpr + mtspr SPRN_AMR, \gpr2 /* No isync required, see kuap_restore_amr() */ +998: END_MMU_FTR_SECTION_NESTED_IFSET(MMU_FTR_RADIX_KUAP, 67) #endif .endm diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index b3c9f15089b6..9d49338e0c85 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -479,11 +479,11 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) fast_interrupt_return: _ASM_NOKPROBE_SYMBOL(fast_interrupt_return) kuap_check_amr r3, r4 - ld r4,_MSR(r1) - andi. r0,r4,MSR_PR + ld r5,_MSR(r1) + andi. r0,r5,MSR_PR bne .Lfast_user_interrupt_return - kuap_restore_amr r3 - andi. r0,r4,MSR_RI + kuap_restore_amr r3, r4 + andi. r0,r5,MSR_RI li r3,0 /* 0 return value, no EMULATE_STACK_STORE */ bne+ .Lfast_kernel_interrupt_return addi r3,r1,STACK_FRAME_OVERHEAD diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index b0ad930cbae5..ef4a90212664 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S @@ -971,7 +971,7 @@ EXC_COMMON_BEGIN(system_reset_common) ld r10,SOFTE(r1) stb r10,PACAIRQSOFTMASK(r13) - kuap_restore_amr r10 + kuap_restore_amr r9, r10 EXCEPTION_RESTORE_REGS RFI_TO_USER_OR_KERNEL @@ -2757,7 +2757,7 @@ EXC_COMMON_BEGIN(soft_nmi_common) ld r10,SOFTE(r1) stb r10,PACAIRQSOFTMASK(r13) - kuap_restore_amr r10 + kuap_restore_amr r9, r10 EXCEPTION_RESTORE_REGS hsrr=0 RFI_TO_KERNEL