Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1012109yba; Thu, 4 Apr 2019 02:23:59 -0700 (PDT) X-Google-Smtp-Source: APXvYqwEOaZkX2zIm6/vmpA5bhVOSJ8Du7p2DZqXc+fZDTyXy9dcA6uBQnCkk8GT2GY5AuAfnxRF X-Received: by 2002:a62:76c1:: with SMTP id r184mr728727pfc.229.1554369839518; Thu, 04 Apr 2019 02:23:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554369839; cv=none; d=google.com; s=arc-20160816; b=zhONft9u23W+nhY4lO2pKaOtGMrM6b2sMiqU7330lf45U7Bo3tAvtgv4t7lAQSWZjw 4FWwBrc5oTHZwvQfxcT7ljOKUoH+OJbnkYx0RIJ5JGtjADXoG5klaDjsUODRLAehzAFl z21iRm+WimpS7IIC+QIVpFArCaeWi2mhq+P/rzaFuXvDVyjrbxdpf4deYVmVuzu3+gju J0AOozZKAEPzMwWowzBIKQnnjLMGALIItvTuB2Wl/Vpu+YE05Gyc0cUF2SR7KAFY6sdn v9sLKDZE8UR8au+joL7tvT8N39zRTcSwLA7tCilFjPPLCRthxLgE1NCZzJboYyaf/PaJ aIMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/5fNNM1BwlJg79P6aZ5zq+9W8EhCTFm8YoLI/Gx8hPI=; b=QvKSe646dGeV1KaE/altRDVHn1jqQPuuQLUjMT6gAr3xdluW0Ix6I4tWI1kpP5h5MT 6Jadheul31O401T3eQbB86nAkJPHcUyF1aAGVbaJE6tN1P6BDh6ycl7A5WGGARloL3QD MlZP6LNXRAhpixEcskeF6GYyVteOmyK6tChWkgpYmR3TgTTxNsmbuOmhJqV45Y2ABxhA 1G5qpKGZSwZcT3biS5t7S4+t9kf8kUK119u0UnbN43HIiTcoXmuTmKk6OAxu0EV/gsP6 kQbIj+xRh7ddUaXbldN5Xz3MaoRjdVMXtptA2sIIj/elrn9ROtrsV68bHJLTjhc6Dcw+ iqgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="VGe/wDsX"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j16si15617827pfa.197.2019.04.04.02.23.44; Thu, 04 Apr 2019 02:23:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-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=@kernel.org header.s=default header.b="VGe/wDsX"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388252AbfDDJVk (ORCPT + 99 others); Thu, 4 Apr 2019 05:21:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:57920 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387637AbfDDJQl (ORCPT ); Thu, 4 Apr 2019 05:16:41 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id AF6E42075E; Thu, 4 Apr 2019 09:16:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554369400; bh=ErT364dMBz4EQQgO/OgfvJK7SqGr0gbRtrXsmnbFn/E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VGe/wDsXZD+RPRjjFRC9UpdU2ABzV3BtAtpP1F0Z/lgmg9Xfu5n982otMDyLtkGEO NJNpgCsILqomHkyEw0DfQWI3jP2mtZ/FxI2qquZZUQtqaxLSWaLFhSoehXIv3S7ZLc mhovBYUd6kt9vggxGU9i301O67oU5RRvoLNRwjqk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vladimir Murzin , Russell King , Sasha Levin Subject: [PATCH 5.0 184/246] ARM: 8830/1: NOMMU: Toggle only bits in EXC_RETURN we are really care of Date: Thu, 4 Apr 2019 10:48:04 +0200 Message-Id: <20190404084625.625137724@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190404084619.236418459@linuxfoundation.org> References: <20190404084619.236418459@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 72cd4064fccaae15ab84d40d4be23667402df4ed ] ARMv8M introduces support for Security extension to M class, among other things it affects exception handling, especially, encoding of EXC_RETURN. The new bits have been added: Bit [6] Secure or Non-secure stack Bit [5] Default callee register stacking Bit [0] Exception Secure which conflicts with hard-coded value of EXC_RETURN: In fact, we only care of few bits: Bit [3] Mode (0 - Handler, 1 - Thread) Bit [2] Stack pointer selection (0 - Main, 1 - Process) We can toggle only those bits and left other bits as they were on exception entry. It is basically, what patch does - saves EXC_RETURN when we do transition form Thread to Handler mode (it is first svc), so later saved value is used instead of EXC_RET_THREADMODE_PROCESSSTACK. Signed-off-by: Vladimir Murzin Signed-off-by: Russell King Signed-off-by: Sasha Levin --- arch/arm/include/asm/v7m.h | 2 +- arch/arm/kernel/entry-header.S | 3 ++- arch/arm/kernel/entry-v7m.S | 4 ++++ arch/arm/mm/proc-v7m.S | 3 +++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/arm/include/asm/v7m.h b/arch/arm/include/asm/v7m.h index 187ccf6496ad..2cb00d15831b 100644 --- a/arch/arm/include/asm/v7m.h +++ b/arch/arm/include/asm/v7m.h @@ -49,7 +49,7 @@ * (0 -> msp; 1 -> psp). Bits [1:0] are fixed to 0b01. */ #define EXC_RET_STACK_MASK 0x00000004 -#define EXC_RET_THREADMODE_PROCESSSTACK 0xfffffffd +#define EXC_RET_THREADMODE_PROCESSSTACK (3 << 2) /* Cache related definitions */ diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S index 773424843d6e..62db1c9746cb 100644 --- a/arch/arm/kernel/entry-header.S +++ b/arch/arm/kernel/entry-header.S @@ -127,7 +127,8 @@ */ .macro v7m_exception_slow_exit ret_r0 cpsid i - ldr lr, =EXC_RET_THREADMODE_PROCESSSTACK + ldr lr, =exc_ret + ldr lr, [lr] @ read original r12, sp, lr, pc and xPSR add r12, sp, #S_IP diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S index abcf47848525..19d2dcd6530d 100644 --- a/arch/arm/kernel/entry-v7m.S +++ b/arch/arm/kernel/entry-v7m.S @@ -146,3 +146,7 @@ ENTRY(vector_table) .rept CONFIG_CPU_V7M_NUM_IRQ .long __irq_entry @ External Interrupts .endr + .align 2 + .globl exc_ret +exc_ret: + .space 4 diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S index 47a5acc64433..92e84181933a 100644 --- a/arch/arm/mm/proc-v7m.S +++ b/arch/arm/mm/proc-v7m.S @@ -139,6 +139,9 @@ __v7m_setup_cont: cpsie i svc #0 1: cpsid i + ldr r0, =exc_ret + orr lr, lr, #EXC_RET_THREADMODE_PROCESSSTACK + str lr, [r0] ldmia sp, {r0-r3, r12} str r5, [r12, #11 * 4] @ restore the original SVC vector entry mov lr, r6 @ restore LR -- 2.19.1