Received: by 10.223.185.116 with SMTP id b49csp5728059wrg; Tue, 27 Feb 2018 20:01:33 -0800 (PST) X-Google-Smtp-Source: AG47ELst0VcTgcfCgsuC+RFdgcUA18Or5ZbwbLOHAEJH4KcUQCHtNx3BncrJ9whrWUXZYmoB2PUs X-Received: by 10.98.238.2 with SMTP id e2mr8376902pfi.68.1519790493612; Tue, 27 Feb 2018 20:01:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519790493; cv=none; d=google.com; s=arc-20160816; b=ZTzoWcSWPN5XaXRdfX5ao+XGi/HQvvZVvi7jOLzTzmRJ2FjI7wQ6VmDSsZmePDrbLD 2Mz2fz2tjcwau3CDkQnUUfG5BPIT2HUCxAyok3Bf8vq35fubY9kAXdt3zeIJ/AVOxqfV cWyjmKwyd2yKSY8aFFWsp3WTYIOGDA0htv5q2Wdyf7vysU2gaSqTe8rXgIt9EVerMWiW oenGUHxI5n4Be+kNBIRg4pECcPCAj4K82Su7yetrKetnRhQ2fVD2EcFsbUOKBHZrZGjn Cm7p2Ghjt17vbb9sy6uqA36sFAC8jAdLW9OcbZoqfQ2qOuP98D56LpD5aHyxjAKBiW9v O9ng== 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=BbrhBHDEMFhCrPIdPhoFv8B5sSWqD0P7v6bm6++E2JU=; b=Tla5juHfWKGgouIlLCEa2od+mP1x/A9l4a96gBJHUqdGtLiHN9xp3ezjQg/GyMP2Jn gnPkDzS7FC/7HrqTA9XbKz+n3NJoeHW9/WzTOCKX4E9EB/hGtv+9b53rknyCL/rRRJv3 O4Npic27FVPsj5iExlx+8w1i8yug8GH5nbSLMXe1dvDyJ0RNW3AIOvzgeXzFRqT24voP wq2mM47TJXF34bRKhIjzc+gWcL5s3IcYNGCCwCpj8Nl0RSDMh77PjfTpl4LSHS3HUfjY duhIykXv3dfiEG88Bzi0YGc5uCA7e5XwMOG+lSGIIhs61KPqUlAIr/16+rxy2aAKAE0F F80g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=d6218NBb; 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; 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 y2si457879pgs.675.2018.02.27.20.01.19; Tue, 27 Feb 2018 20:01:33 -0800 (PST) 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=@linaro.org header.s=google header.b=d6218NBb; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752068AbeB1D6R (ORCPT + 99 others); Tue, 27 Feb 2018 22:58:17 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:38662 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751814AbeB1D6P (ORCPT ); Tue, 27 Feb 2018 22:58:15 -0500 Received: by mail-pg0-f67.google.com with SMTP id l24so484433pgc.5 for ; Tue, 27 Feb 2018 19:58:15 -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=BbrhBHDEMFhCrPIdPhoFv8B5sSWqD0P7v6bm6++E2JU=; b=d6218NBbdhhfvf2H33B6hbHFIBVfL3tx0mMoWLifIGuj/PiT9cAd2FhAYsnPE296er wvYOXson94njb9Td1TyLdwwiQtTFAFBh5dX2MCDtANK1AFZVrdQcAHYZtqoYdeapcAqk cA3kBYzF0l6ahvv1p4Ky3HeVcP57/r/+bCbQk= 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=BbrhBHDEMFhCrPIdPhoFv8B5sSWqD0P7v6bm6++E2JU=; b=QrFGSipsq5bFwE1Dq82cm4qOhYAByHBKlczW9BP9sDEV58rnhfQvo2Z+mTJlUJbldC D02SxWxDYiplSdjCE8NxcYlH0z3ELO4Y7Mz2Ar9tT92MYsCMmaDnZQ3O96qs7FuiJdoY FySf0j8/Qvqce5ZTlhGWozslLlJsasNpYzQoCPqLrkxl8Q/1GYprJxetX1gR6uwjWuod tpTCCCSjUcU7WKsYlQezhGiE24yCDs1xUnHsDtGXdgttsuXe9qVOnbxnlNa1B/2Iaq7J d+itvKUWWCh/B1WS8yOKVxxVODl5kWw1Ql768/PDwMVkoWTKfWkS2YCrMw9Cwfasp1Ky kkQg== X-Gm-Message-State: APf1xPD3DqVM9l0ry4upzAnZh9n1F04+opCZsixf+Jk4gILQaQBWfaqu IApPlJU0MxBh5o49kyT4bq8OE9Jq7VI= X-Received: by 10.98.237.12 with SMTP id u12mr4516684pfh.72.1519790294747; Tue, 27 Feb 2018 19:58:14 -0800 (PST) Received: from localhost.localdomain (176.122.172.82.16clouds.com. [176.122.172.82]) by smtp.gmail.com with ESMTPSA id q17sm739911pgt.7.2018.02.27.19.58.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 27 Feb 2018 19:58:14 -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: Mark Rutland , James Morse , Alex Shi Subject: [PATCH 06/29] arm64: factor out entry stack manipulation Date: Wed, 28 Feb 2018 11:56:28 +0800 Message-Id: <1519790211-16582-7-git-send-email-alex.shi@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1519790211-16582-1-git-send-email-alex.shi@linaro.org> References: <1519790211-16582-1-git-send-email-alex.shi@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mark Rutland commit b11e5759bfac upstream. In subsequent patches, we will detect stack overflow in our exception entry code, by verifying the SP after it has been decremented to make space for the exception regs. This verification code is small, and we can minimize its impact by placing it directly in the vectors. To avoid redundant modification of the SP, we also need to move the initial decrement of the SP into the vectors. As a preparatory step, this patch introduces kernel_ventry, which performs this decrement, and updates the entry code accordingly. Subsequent patches will fold SP verification into kernel_ventry. There should be no functional change as a result of this patch. Signed-off-by: Ard Biesheuvel [Mark: turn into prep patch, expand commit msg] Signed-off-by: Mark Rutland Reviewed-by: Will Deacon Tested-by: Laura Abbott Cc: Catalin Marinas Cc: James Morse Signed-off-by: Alex Shi --- arch/arm64/kernel/entry.S | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index b4c7db4..f5aa8f0 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -68,8 +68,13 @@ #define BAD_FIQ 2 #define BAD_ERROR 3 - .macro kernel_entry, el, regsize = 64 + .macro kernel_ventry label + .align 7 sub sp, sp, #S_FRAME_SIZE + b \label + .endm + + .macro kernel_entry, el, regsize = 64 .if \regsize == 32 mov w0, w0 // zero upper 32 bits of x0 .endif @@ -257,31 +262,31 @@ tsk .req x28 // current thread_info .align 11 ENTRY(vectors) - ventry el1_sync_invalid // Synchronous EL1t - ventry el1_irq_invalid // IRQ EL1t - ventry el1_fiq_invalid // FIQ EL1t - ventry el1_error_invalid // Error EL1t + kernel_ventry el1_sync_invalid // Synchronous EL1t + kernel_ventry el1_irq_invalid // IRQ EL1t + kernel_ventry el1_fiq_invalid // FIQ EL1t + kernel_ventry el1_error_invalid // Error EL1t - ventry el1_sync // Synchronous EL1h - ventry el1_irq // IRQ EL1h - ventry el1_fiq_invalid // FIQ EL1h - ventry el1_error_invalid // Error EL1h + kernel_ventry el1_sync // Synchronous EL1h + kernel_ventry el1_irq // IRQ EL1h + kernel_ventry el1_fiq_invalid // FIQ EL1h + kernel_ventry el1_error_invalid // Error EL1h - ventry el0_sync // Synchronous 64-bit EL0 - ventry el0_irq // IRQ 64-bit EL0 - ventry el0_fiq_invalid // FIQ 64-bit EL0 - ventry el0_error_invalid // Error 64-bit EL0 + kernel_ventry el0_sync // Synchronous 64-bit EL0 + kernel_ventry el0_irq // IRQ 64-bit EL0 + kernel_ventry el0_fiq_invalid // FIQ 64-bit EL0 + kernel_ventry el0_error_invalid // Error 64-bit EL0 #ifdef CONFIG_COMPAT - ventry el0_sync_compat // Synchronous 32-bit EL0 - ventry el0_irq_compat // IRQ 32-bit EL0 - ventry el0_fiq_invalid_compat // FIQ 32-bit EL0 - ventry el0_error_invalid_compat // Error 32-bit EL0 + kernel_ventry el0_sync_compat // Synchronous 32-bit EL0 + kernel_ventry el0_irq_compat // IRQ 32-bit EL0 + kernel_ventry el0_fiq_invalid_compat // FIQ 32-bit EL0 + kernel_ventry el0_error_invalid_compat // Error 32-bit EL0 #else - ventry el0_sync_invalid // Synchronous 32-bit EL0 - ventry el0_irq_invalid // IRQ 32-bit EL0 - ventry el0_fiq_invalid // FIQ 32-bit EL0 - ventry el0_error_invalid // Error 32-bit EL0 + kernel_ventry el0_sync_invalid // Synchronous 32-bit EL0 + kernel_ventry el0_irq_invalid // IRQ 32-bit EL0 + kernel_ventry el0_fiq_invalid // FIQ 32-bit EL0 + kernel_ventry el0_error_invalid // Error 32-bit EL0 #endif END(vectors) -- 2.7.4