From patchwork Thu Mar 1 12:54:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Shi X-Patchwork-Id: 130204 Delivered-To: patch@linaro.org Received: by 10.80.172.228 with SMTP id x91csp2763314edc; Thu, 1 Mar 2018 04:59:04 -0800 (PST) X-Google-Smtp-Source: AG47ELvJqa56zky1pyyhOM5fhL2x1xR7aYzuqqhG+STqgPx/6Frs9VU+RjVpV+TJbD5h/zuzleTa X-Received: by 2002:a17:902:a512:: with SMTP id s18-v6mr1858977plq.296.1519909144702; Thu, 01 Mar 2018 04:59:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519909144; cv=none; d=google.com; s=arc-20160816; b=werxO7GLBErJU6pEnyy480kigbekZhhoWoJc2SwIfnThiUDLeeqWVTOBOiy4tL+0KN Jt/bmp+3lz1nxKdaE1XQr18ivUvHZSjPKS8uSu/2se/qYTPjduiatuHLDM6pyzZwZDF7 BWy52IuK5UUg4rfSfg0gljeoXyImJEc6a4jrvw33L4Yi+9/lSGhIgCCocTEL7OY0VJBH 6HoD3sIF4qNX7iD7jGq9e5ynN/02gVCjR6y6ZYqUB19TVtJLFk1/Jf4ljh/NitB0gnvz /e/omNUWsVBh+KsyOOFfFqtl1cLD/23MwfJQma4j3mG1necuxTyoyetYS+v388NQFrVb G28A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=YaNlfJjXAm7Tj4lsPJi0xUkj7+DnsswK/FzZeoAqgZ8=; b=tTXWU95keH9HQhHclRZlrkG4NJZZzufe/byXshuJDmi6V1DNkQwR1hoK0pVLjl7xXY jYsdtTl8ki9VNkZuf/dJ+WTVyIMMW6vMczyRBipxBrhaw2JUjwluuJCdT5VhjSTZHfpJ 0Aw8UYJ7Q4WBFtFgSUL6iFfpTNe8oIP561xDVa2K9WzzRXraqUifCSNAIPxwxFaoCxgS hMa5np5w/kIgTYjWaFjnw4VXbo3PKtLySADvsbaYsDEKjizsXu9YcubVVYdVaXHcpoyf Owm/ZxVfz51RWEwx65cOaxLZy9opnuO1CurN9RqQ53tNdvuYX7hIw2Eloz7e/wOCE/bf Kl3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=W450VjVU; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i2si3010736pfa.347.2018.03.01.04.59.04; Thu, 01 Mar 2018 04:59:04 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of stable-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=@linaro.org header.s=google header.b=W450VjVU; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030967AbeCAM7D (ORCPT + 10 others); Thu, 1 Mar 2018 07:59:03 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:34416 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030959AbeCAM7A (ORCPT ); Thu, 1 Mar 2018 07:59:00 -0500 Received: by mail-pg0-f65.google.com with SMTP id m19so2278325pgn.1 for ; Thu, 01 Mar 2018 04:59:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=YaNlfJjXAm7Tj4lsPJi0xUkj7+DnsswK/FzZeoAqgZ8=; b=W450VjVULfESSLecI29my/KhkZfCs1kvm52qnoYBk7dus3/opeXMMtXc4bwKVr6C52 0nXc3Iy5mp3iecFj861l3leo91XXIkT4PYmQ1eHVX5MTAlCWacESDG8WTy/T52Ala7rd DmfInnzoyRim0YBzMnZOpYY8LzJPoRJFciJks= 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; bh=YaNlfJjXAm7Tj4lsPJi0xUkj7+DnsswK/FzZeoAqgZ8=; b=QsQM42osnQy9n2Gu00EZnyb1k3RRBAxiOFBf0u+WIVwfGsVQULP4aEfYbJHM485i9T Jm2OAYil72GTP00Xxg7oKYmGNHOiem9jqI9p9O9A0REi7oCnNiJiIJsf4cBMh2WpjZcz waBiLJnXyW16C3nJUHqMi8MYf20FdvCWhaNUeSuQMFROLgrLpU+HML382cLRv6lteEmO zYf1g0EVuCiyvi2nFr8dQq1u+/eAT/2yA4a+4Rvb2vTFz0/OvM4ItBocpoH+1PGwHEXZ Q0iDdkjkbjq3FTMkDzLZS1eZZdjNaT/gqS+UEqboLdu3p73bzJKTJvcqFdpIQmonmAJD Y8jA== X-Gm-Message-State: APf1xPCivaekg+Ya1i/mDhSkKBP2YM7C9NkFgxFLRLra9ZlTNNxkzjXw azkwotXhBhR23J/Dove33JBsbA== X-Received: by 10.98.172.18 with SMTP id v18mr1852855pfe.175.1519909139909; Thu, 01 Mar 2018 04:58:59 -0800 (PST) Received: from localhost.localdomain (176.122.172.82.16clouds.com. [176.122.172.82]) by smtp.gmail.com with ESMTPSA id x4sm2289655pfb.46.2018.03.01.04.58.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 01 Mar 2018 04:58:59 -0800 (PST) From: Alex Shi To: Marc Zyngier , Will Deacon , Ard Biesheuvel , Catalin Marinas , stable@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Alex Shi Subject: [PATCH 26/45] arm64: entry: Apply BP hardening for high-priority synchronous exceptions Date: Thu, 1 Mar 2018 20:54:03 +0800 Message-Id: <1519908862-11425-27-git-send-email-alex.shi@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1519908862-11425-1-git-send-email-alex.shi@linaro.org> References: <1519908862-11425-1-git-send-email-alex.shi@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Will Deacon commit 5dfc6ed27710 upstream. Software-step and PC alignment fault exceptions have higher priority than instruction abort exceptions, so apply the BP hardening hooks there too if the user PC appears to reside in kernel space. Reported-by: Dan Hettena Reviewed-by: Marc Zyngier Signed-off-by: Will Deacon Signed-off-by: Catalin Marinas Signed-off-by: Alex Shi --- arch/arm64/kernel/entry.S | 6 ++++-- arch/arm64/mm/fault.c | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index bdb0139..d50c2fe 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -584,8 +584,10 @@ el0_sp_pc: * Stack or PC alignment exception handling */ mrs x26, far_el1 - // enable interrupts before calling the main handler - enable_dbg_and_irq + msr daifclr, #(8 | 4 | 1) +#ifdef CONFIG_TRACE_IRQFLAGS + bl trace_hardirqs_off +#endif ct_user_exit mov x0, x26 mov x1, x25 diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index c95b194..6120a14 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -617,6 +617,12 @@ asmlinkage void __exception do_sp_pc_abort(unsigned long addr, struct siginfo info; struct task_struct *tsk = current; + if (user_mode(regs)) { + if (instruction_pointer(regs) > TASK_SIZE) + arm64_apply_bp_hardening(); + local_irq_enable(); + } + if (show_unhandled_signals && unhandled_signal(tsk, SIGBUS)) pr_info_ratelimited("%s[%d]: %s exception: pc=%p sp=%p\n", tsk->comm, task_pid_nr(tsk), @@ -676,6 +682,9 @@ asmlinkage int __exception do_debug_exception(unsigned long addr, if (interrupts_enabled(regs)) trace_hardirqs_off(); + if (user_mode(regs) && instruction_pointer(regs) > TASK_SIZE) + arm64_apply_bp_hardening(); + if (!inf->fn(addr, esr, regs)) { rv = 1; } else {