From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-eopbgr690092.outbound.protection.outlook.com ([40.107.69.92]:17633 "EHLO NAM04-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729959AbeIQI27 (ORCPT ); Mon, 17 Sep 2018 04:28:59 -0400 From: Sasha Levin To: "stable@vger.kernel.org" , "linux-kernel@vger.kernel.org" CC: Mikulas Patocka , Will Deacon , Sasha Levin Subject: [PATCH AUTOSEL 4.14 22/87] arm64: fix infinite stacktrace Date: Mon, 17 Sep 2018 03:02:37 +0000 Message-ID: <20180917030220.245686-22-alexander.levin@microsoft.com> References: <20180917030220.245686-1-alexander.levin@microsoft.com> In-Reply-To: <20180917030220.245686-1-alexander.levin@microsoft.com> Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org List-ID: From: Mikulas Patocka [ Upstream commit 7e7df71fd57ff2894d96abb0080922bf39460a79 ] I've got this infinite stacktrace when debugging another problem: [ 908.795225] INFO: rcu_preempt detected stalls on CPUs/tasks: [ 908.796176] 1-...!: (1 GPs behind) idle=3D952/1/4611686018427387904 sof= tirq=3D1462/1462 fqs=3D355 [ 908.797692] 2-...!: (1 GPs behind) idle=3Df42/1/4611686018427387904 sof= tirq=3D1550/1551 fqs=3D355 [ 908.799189] (detected by 0, t=3D2109 jiffies, g=3D130, c=3D129, q=3D235= ) [ 908.800284] Task dump for CPU 1: [ 908.800871] kworker/1:1 R running task 0 32 2 0x0000= 0022 [ 908.802127] Workqueue: writecache-writeabck writecache_writeback [dm_wri= tecache] [ 908.820285] Call trace: [ 908.824785] __switch_to+0x68/0x90 [ 908.837661] 0xfffffe00603afd90 [ 908.844119] 0xfffffe00603afd90 [ 908.850091] 0xfffffe00603afd90 [ 908.854285] 0xfffffe00603afd90 [ 908.863538] 0xfffffe00603afd90 [ 908.865523] 0xfffffe00603afd90 The machine just locked up and kept on printing the same line over and over again. This patch fixes it. Signed-off-by: Mikulas Patocka Signed-off-by: Will Deacon Signed-off-by: Sasha Levin --- arch/arm64/kernel/stacktrace.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.= c index d5718a060672..e160ca123da3 100644 --- a/arch/arm64/kernel/stacktrace.c +++ b/arch/arm64/kernel/stacktrace.c @@ -56,6 +56,9 @@ int notrace unwind_frame(struct task_struct *tsk, struct = stackframe *frame) frame->fp =3D READ_ONCE_NOCHECK(*(unsigned long *)(fp)); frame->pc =3D READ_ONCE_NOCHECK(*(unsigned long *)(fp + 8)); =20 + if (frame->fp <=3D fp) + return -EINVAL; + #ifdef CONFIG_FUNCTION_GRAPH_TRACER if (tsk->ret_stack && (frame->pc =3D=3D (unsigned long)return_to_handler)) { --=20 2.17.1