From patchwork Thu Jul 30 20:51:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Desaulniers X-Patchwork-Id: 11693675 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D96131392 for ; Thu, 30 Jul 2020 20:53:11 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AF07B20829 for ; Thu, 30 Jul 2020 20:53:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="QdKFNMHI"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="ViS1JlQV" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AF07B20829 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:From:Subject:References:Mime-Version:Message-Id: In-Reply-To:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=7GL3SsTtpUepldMSwSKf9aPPqqkKAXG5etthZtGSQ2w=; b=QdKFNMHIZxGt51Uj4JoVQgGSf PUG3tJibR0yjXkT9DWVTTpYItqo0qgFJxiZTA0ospQvbw77UBgy21MpjXOTnFNSyUYt+5Mhi8atF0 gOazumTSCGfvVNtB9Muw+hSnI2JkYna7JUcoA4jlb7WbX5pC0YukH6Qde1fuJGXUjzJUVVC5HdPRv 6htckZ3gEZ4NIei2r6P+q/j5ZCUGnZqmiNE9+/yhmGKmdVK1bE3yaEOuA8N3THXBrKS6znMM4YRq2 BR6BFefxWYg/N8YZ3I0lICj0X+qNmw0YBh8PwQWZDM1k7+fJ5tLQ69g1MRKmVx2ioVUX88OseoxOW ejOOvld0A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k1FWZ-0004gg-6R; Thu, 30 Jul 2020 20:51:35 +0000 Received: from mail-yb1-xb4a.google.com ([2607:f8b0:4864:20::b4a]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k1FWU-0004dy-4s for linux-arm-kernel@lists.infradead.org; Thu, 30 Jul 2020 20:51:30 +0000 Received: by mail-yb1-xb4a.google.com with SMTP id t203so2766868yba.11 for ; Thu, 30 Jul 2020 13:51:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=G95KKuekTz1iA7Zr8ZdyT9EdDFTvRs8dYtvTVOv4Dfc=; b=ViS1JlQVeIZx1+sasiczEhUQiJqT9BJ3+cGlNfVvdmsU9R2mLheJZdbOTUgKPav/+p 5pdrAapxvRSoKlz+chL0Gy18OCbJssl+aqaycS4dtpZekMdniwmfHSE28+u/htN+H2l+ lzAV54E++V9VAVcItllAAJIR59b/yWJz3F+UzYTyFBu/N5BqHonoSRohu96fk/lK3LEL 0FlD+6rYx6p5mrUR2jhCMNL3Mk/QYxpV5o//SYtwl8PLWXae6OWyWZcWxICKQUEdXgj8 g1z85D6nN1NBUXBVWo8pSEl6use+HV+VDaOcghe11TQpqrFnYk0mdJa+xoPyhRvpSBPa 46FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=G95KKuekTz1iA7Zr8ZdyT9EdDFTvRs8dYtvTVOv4Dfc=; b=BrqQ49CALi2sqNMfy/wdfjUjsa9UywROg5WZVXGtRrDxYXNtiZOvdupYU0/7RzUcQr D4ecjxyFgj8NiiKQ3e2CdZvyQ5DgAzRIumIMYV3mJCx8hOAgVja+K7440T3jGSaN4AsZ a+m8Jvg9uTT7TTsNtnkDNr9gRqfiDbMuA8Wu/hn2+s9kEdiWy5I3MRYCZGBB7WFwqfub qRzalLkNOSDSDsPZ72YIhsKfouj3ydbds+JBsVovdQzcDyc6O12fpmzxwZLhfkEl7gnW SENde8H4lmsknmk+rP3ZGrr3m92HZ4EaKHbMmm4jWgOOTC6+p8P9Eud3U0W+2o60LG2j dhTQ== X-Gm-Message-State: AOAM530ITpbBviUHCIsvTDGT6S3/M3zIFoDxdaKgyOUQCabyFmq7E4E5 bnLocSNdnVILaLiXWVOtxfMauyq4QPqV9qMkhig= X-Google-Smtp-Source: ABdhPJx9IM+NZ+Dy+UO1H89OWuA1mQwu+ABN06cb8h6aN7Xpr4/KTHo0SHpRsO8t4uShHvxZa2ijHx26yaXliUNcOww= X-Received: by 2002:a25:40cb:: with SMTP id n194mr1171359yba.380.1596142286622; Thu, 30 Jul 2020 13:51:26 -0700 (PDT) Date: Thu, 30 Jul 2020 13:51:09 -0700 In-Reply-To: <20200730205112.2099429-1-ndesaulniers@google.com> Message-Id: <20200730205112.2099429-2-ndesaulniers@google.com> Mime-Version: 1.0 References: <20200730205112.2099429-1-ndesaulniers@google.com> X-Mailer: git-send-email 2.28.0.163.g6104cc2f0b6-goog Subject: [PATCH 1/4] ARM: backtrace-clang: check for NULL lr From: Nick Desaulniers To: Nathan Huckleberry , Russell King X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200730_165130_256411_311B2974 X-CRM114-Status: GOOD ( 14.01 ) X-Spam-Score: -7.7 (-------) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-7.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:b4a listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -7.5 USER_IN_DEF_DKIM_WL From: address is in the default DKIM white-list 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.0 DKIMWL_WL_MED DKIMwl.org - Medium sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nick Desaulniers , Chunyan Zhang , Dmitry Safonov <0x7f454c46@gmail.com>, linux-kernel@vger.kernel.org, stable@vger.kernel.org, clang-built-linux@googlegroups.com, Miles Chen , linux-mediatek@lists.infradead.org, Matthias Brugger , Andrew Morton , Lvqiang Huang , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org If the link register was zeroed out, do not attempt to use it for address calculations for which there are currently no fixup handlers, which can lead to a panic during unwind. Since panicking triggers another unwind, this can lead to an infinite loop. If this occurs during start_kernel(), this can prevent a kernel from booting. commit 59b6359dd92d ("ARM: 8702/1: head-common.S: Clear lr before jumping to start_kernel()") intentionally zeros out the link register in __mmap_switched which tail calls into start kernel. Test for this condition so that we can stop unwinding when initiated within start_kernel() correctly. Cc: stable@vger.kernel.org Fixes: commit 6dc5fd93b2f1 ("ARM: 8900/1: UNWINDER_FRAME_POINTER implementation for Clang") Reported-by: Miles Chen Signed-off-by: Nick Desaulniers Reviewed-by: Nathan Huckleberry --- arch/arm/lib/backtrace-clang.S | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/lib/backtrace-clang.S b/arch/arm/lib/backtrace-clang.S index 6174c45f53a5..5388ac664c12 100644 --- a/arch/arm/lib/backtrace-clang.S +++ b/arch/arm/lib/backtrace-clang.S @@ -144,6 +144,8 @@ for_each_frame: tst frame, mask @ Check for address exceptions */ 1003: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame + tst sv_lr, #0 @ If there's no previous lr, + beq finished_setup @ we're done. ldr r0, [sv_lr, #-4] @ get call instruction ldr r3, .Lopcode+4 and r2, r3, r0 @ is this a bl call From patchwork Thu Jul 30 20:51:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Desaulniers X-Patchwork-Id: 11693677 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E3E8B1392 for ; Thu, 30 Jul 2020 20:53:12 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BD1A320829 for ; Thu, 30 Jul 2020 20:53:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="G1q3qg93"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="bS33mlwd" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BD1A320829 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:From:Subject:References:Mime-Version:Message-Id: In-Reply-To:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=jLYLhlDDfXIoff6mRswpeNRUIWkzAsp2C9nOIfrISFs=; b=G1q3qg93/Ek334mOO98LbAgTE DtYe4W6jZWKdUDG1SuaZI6nG0MwPkib6VPlnbVQ7fa3si8EX6IFIDha3FJQX6x0lZNEkzVNqpv3Z3 MfidZ4ZwyyLlAMGdxRzSY1h7l0PiWZR98CMQXb/z1VWpA/BT0uUMlatcTIbvw7op0p3CY7NKTcBIk 8zbNgta/kLpgo9dndeIsPdSzaBFzDyW6wGOhc674rmGKW6iBFCCukqdYiC/ohpcwvZ0mX5oXjhN1H oqUt3lNublnLKdP0umYdcJ5Ezn10/nKSqXa42HLsOwv5r7fGnqlxBnI63/TRgAeyLj8LxPNrm5v+v keyBjUvyw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k1FWh-0004jE-4q; Thu, 30 Jul 2020 20:51:43 +0000 Received: from mail-pj1-x1049.google.com ([2607:f8b0:4864:20::1049]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k1FWX-0004fL-PR for linux-arm-kernel@lists.infradead.org; Thu, 30 Jul 2020 20:51:35 +0000 Received: by mail-pj1-x1049.google.com with SMTP id g16so6695165pjz.3 for ; Thu, 30 Jul 2020 13:51:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=U0OUPTDRNGhh0ydoN6VkhJdiruQZ6OtwNxR4N39C4f8=; b=bS33mlwdf/DJIQD28epPbEI7pJZXa1xHzvIjvbrwJsYvNRprRL04EmCMO8BY7c7vyR ofLXj+EecJitrlsOgIRSeYox7Ze/fCWlAwsLoJGJXNxJhm1Jzit1E25lLOIc4Zq4SNtH vDVgxSSFKjr6Dev1jNeB+/y6/4/TPRX9evR1RJBCof4kAi7IzZUb1z4wOFHcPt1MDXS1 UMmiVxWsDAo7fDiJWj5rZyAePJEpkaW+/xc4T//YX/DRcxFqZMlHsEZewHwkWf3ZE5Bn pEZzlVLo2QFc9P0WbNbGGnsimIfk/QgsbAfVHpxvfHt3Lp7csq8m7P0gUJ1850oZa06/ oWcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=U0OUPTDRNGhh0ydoN6VkhJdiruQZ6OtwNxR4N39C4f8=; b=EZER1XOj3XCsV6Ni2bToMoOrlYmSxim7jPF9pma9F+O7VPucyfwRT/LwFTq3CbxM1P QJNs8p5GI2CdAZEUrl5K7BtGi329thv7EJ9l0FEJlbO9ILGqBYYU+iGeMKF5NzJbl5+A FOW7jWuo5j715+RqscGb9InCsUCXEuSsEPVYvkKuCNGdN053Q0pbMA2AC7GFSqk6yVvx 6Wl42St22nS9RhfH4urqaEhevChSGWDcb9SUYNngEf8i9iHlchvDQ22pLhHH3cCANGDP 2gNhrwicPhzWbRYL42UK6GwHx6oH+UIcxs16N2meefIywRXCv3vAKm+9Dn1OzLuK9JWt oWnw== X-Gm-Message-State: AOAM530Xezh0EsGb4KWjwx/LVmStftZt6REBA1+uJeSBkH/ubFOFmdZK LNzqEE2J1kOtYsSMeRU/8FNXTz5T/Wn30h/z+7M= X-Google-Smtp-Source: ABdhPJwCEyx+wmqrFUv640p8yJy8eY2sYOEIDXEj/DD5NDhOwWleNVqKa5yzVDKQryUe9mvaALl+3zlHBVcQT43pRDg= X-Received: by 2002:a17:90b:4d0b:: with SMTP id mw11mr923395pjb.4.1596142290243; Thu, 30 Jul 2020 13:51:30 -0700 (PDT) Date: Thu, 30 Jul 2020 13:51:10 -0700 In-Reply-To: <20200730205112.2099429-1-ndesaulniers@google.com> Message-Id: <20200730205112.2099429-3-ndesaulniers@google.com> Mime-Version: 1.0 References: <20200730205112.2099429-1-ndesaulniers@google.com> X-Mailer: git-send-email 2.28.0.163.g6104cc2f0b6-goog Subject: [PATCH 2/4] ARM: backtrace-clang: add fixup for lr dereference From: Nick Desaulniers To: Nathan Huckleberry , Russell King X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200730_165133_887918_4F7E980D X-CRM114-Status: GOOD ( 14.91 ) X-Spam-Score: -7.7 (-------) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-7.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:1049 listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -7.5 USER_IN_DEF_DKIM_WL From: address is in the default DKIM white-list 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.0 DKIMWL_WL_MED DKIMwl.org - Medium sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nick Desaulniers , Chunyan Zhang , Dmitry Safonov <0x7f454c46@gmail.com>, linux-kernel@vger.kernel.org, stable@vger.kernel.org, clang-built-linux@googlegroups.com, Miles Chen , linux-mediatek@lists.infradead.org, Matthias Brugger , Andrew Morton , Lvqiang Huang , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org If the value of the link register is not correct (tail call from asm that didn't set it, stack corruption, memory no longer mapped), then using it for an address calculation may trigger an exception. Without a fixup handler, this will lead to a panic, which will unwind, which will trigger the fault repeatedly in an infinite loop. We don't observe such failures currently, but we have. Just to be safe, add a fixup handler here so that at least we don't have an infinite loop. Cc: stable@vger.kernel.org Fixes: commit 6dc5fd93b2f1 ("ARM: 8900/1: UNWINDER_FRAME_POINTER implementation for Clang") Reported-by: Miles Chen Signed-off-by: Nick Desaulniers --- arch/arm/lib/backtrace-clang.S | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/arm/lib/backtrace-clang.S b/arch/arm/lib/backtrace-clang.S index 5388ac664c12..40eb2215eaf4 100644 --- a/arch/arm/lib/backtrace-clang.S +++ b/arch/arm/lib/backtrace-clang.S @@ -146,7 +146,7 @@ for_each_frame: tst frame, mask @ Check for address exceptions tst sv_lr, #0 @ If there's no previous lr, beq finished_setup @ we're done. - ldr r0, [sv_lr, #-4] @ get call instruction +prev_call: ldr r0, [sv_lr, #-4] @ get call instruction ldr r3, .Lopcode+4 and r2, r3, r0 @ is this a bl call teq r2, r3 @@ -206,6 +206,13 @@ finished_setup: mov r2, frame bl printk no_frame: ldmfd sp!, {r4 - r9, fp, pc} +/* + * Accessing the address pointed to by the link register triggered an + * exception, don't try to unwind through it. + */ +bad_lr: mov sv_fp, #0 + mov sv_lr, #0 + b finished_setup ENDPROC(c_backtrace) .pushsection __ex_table,"a" .align 3 @@ -214,6 +221,7 @@ ENDPROC(c_backtrace) .long 1003b, 1006b .long 1004b, 1006b .long 1005b, 1006b + .long prev_call, bad_lr .popsection .Lbad: .asciz "%sBacktrace aborted due to bad frame pointer <%p>\n" From patchwork Thu Jul 30 20:51:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Desaulniers X-Patchwork-Id: 11693671 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 32BCA14E3 for ; Thu, 30 Jul 2020 20:52:13 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 09AB420829 for ; Thu, 30 Jul 2020 20:52:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="jRq+sDkF"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="h7wTTnVr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 09AB420829 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:From:Subject:References:Mime-Version:Message-Id: In-Reply-To:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=jMte9CnjSdZqsg/X0UkjOlAvnlSeYNgeh/ALjkn8FEw=; b=jRq+sDkFORlOJZKBP1eQ/LNpP UousNX3SCWh98ZoQrcQzZ4wGkfQ8/A6i3EulwLgq83gvNpxmjDLuaZoMNrPcUqYXGQfO2E4lzAwYF e6W1VahOnRpC4TbevNorWyLSYO6/mAWsIaIC12DYhu+Qw+juFMgZajYIUhkluysDuecw/fFxNHBrq G1WP7OmEEK0oxsSl012CoMhr+XU5HioiW/MLz2KNvsw/bz1dtrPi/6DaRpxi8OKKe89JyJqPdSeZ6 9uf9gpNUylyVJxeq/92LHEB3Kue0GV+bO/gzqadCj33SY6VZ2BqlOsXGWdmFfo5fQkMPlO8rgr76f 2TtVcoqZg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k1FWu-0004o4-DG; Thu, 30 Jul 2020 20:51:56 +0000 Received: from mail-qt1-x84a.google.com ([2607:f8b0:4864:20::84a]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k1FWc-0004gs-B8 for linux-arm-kernel@lists.infradead.org; Thu, 30 Jul 2020 20:51:39 +0000 Received: by mail-qt1-x84a.google.com with SMTP id d24so12030518qtg.23 for ; Thu, 30 Jul 2020 13:51:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=ydEFx7nL1QHetJ3IzZOqahIDDjnqGsyqZ8n++t96BPs=; b=h7wTTnVreiKdJy+S3fm1G5Q+3oIaI3sFumAyVhgRi/n9ezm7wRwkGq12SeApvBf77Z yX7kGgMRDPif/nTYK3URgcmC1Hxjt9vaylvzFShL86Y577Y6AIKwncRD7f+EY3NuLIgC p7gZGl2vcGUf1bULilSS8BokmMppT1Dk6tDPMc2loxDlz/Sj0BwExazMghpSO2ttTSYm QZT41EGqN8BUowWyiJBATS4vAbv+FJCk9y9IxDLnYkcJddcQ3rn2W7WaH/CaXUGuKrou Q/E6wrfVPA3s3Q8HvtnjIGhotWF6O53G/C61bFtcN5o/TijH9HAU744EsMUgY5wpo+GY jLwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=ydEFx7nL1QHetJ3IzZOqahIDDjnqGsyqZ8n++t96BPs=; b=YJTBowEnUK5NPtKnDQuzuK7JgneFrVbcXMrZDVrENwq0qAO865qc6BVHV7a0qRRT+G yvX6QXK0Jr71H5AwAEZPysiVDCGkRc+CLC9dm3538ZATgormr4rNZunl6jj0vyXZtOpV BXlsMs4ftRM0R7VTXmj6pVh7dvdchsnNxEvXBsB7Pj8oW9D6stuUR5ddI6zvKgjXhE00 Wu6m9J55sLCCZB3R5NBUSy/AyS0kb0yIkAc5LFMBhCdxPBuzrd9LJGX64K2E5xrqgC3t xTu2IgsaVC2nfAdwaGDbHHl+/8Si9xW7MikAPu4BZL9vr9C8rdCi+3ek/4cRUK7SexhF ZDvw== X-Gm-Message-State: AOAM531woZYxn/F6ftIXTAnDaVt56xlw5BvWN2fHnN+Pl37os4EfDPfm 3a0yqubur/7AYjhBSNnYGQv3AQaTpQAIaIuACpk= X-Google-Smtp-Source: ABdhPJypnfQMkIkUmhttCt6JJcEy5+kESjzSY6DmkgV227v2mbIs9Wfta5Fz6VMfPMaMbwf8XRvCb9EMykZZanPJTgU= X-Received: by 2002:a0c:b891:: with SMTP id y17mr1039225qvf.2.1596142294513; Thu, 30 Jul 2020 13:51:34 -0700 (PDT) Date: Thu, 30 Jul 2020 13:51:11 -0700 In-Reply-To: <20200730205112.2099429-1-ndesaulniers@google.com> Message-Id: <20200730205112.2099429-4-ndesaulniers@google.com> Mime-Version: 1.0 References: <20200730205112.2099429-1-ndesaulniers@google.com> X-Mailer: git-send-email 2.28.0.163.g6104cc2f0b6-goog Subject: [PATCH 3/4] ARM: backtrace-clang: give labels more descriptive names From: Nick Desaulniers To: Nathan Huckleberry , Russell King X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200730_165138_466799_CF8F3EAD X-CRM114-Status: GOOD ( 13.09 ) X-Spam-Score: -7.7 (-------) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-7.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:84a listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -7.5 USER_IN_DEF_DKIM_WL From: address is in the default DKIM white-list 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.0 DKIMWL_WL_MED DKIMwl.org - Medium sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nick Desaulniers , Chunyan Zhang , Dmitry Safonov <0x7f454c46@gmail.com>, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, Miles Chen , linux-mediatek@lists.infradead.org, Matthias Brugger , Andrew Morton , Lvqiang Huang , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Removes the 1004 label; it was neither a control flow target, nor an instruction we expect to produce a fault. Gives the labels slightly more readable names. The `b` suffixes are handy to disambiguate between labels of the same identifier when there's more than one. Since these labels are unique, let's just give them names. Signed-off-by: Nick Desaulniers --- arch/arm/lib/backtrace-clang.S | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/arch/arm/lib/backtrace-clang.S b/arch/arm/lib/backtrace-clang.S index 40eb2215eaf4..7dad2a6843a5 100644 --- a/arch/arm/lib/backtrace-clang.S +++ b/arch/arm/lib/backtrace-clang.S @@ -121,8 +121,8 @@ for_each_frame: tst frame, mask @ Check for address exceptions * start. This value gets updated to be the function start later if it is * possible. */ -1001: ldr sv_pc, [frame, #4] @ get saved 'pc' -1002: ldr sv_fp, [frame, #0] @ get saved fp +load_pc: ldr sv_pc, [frame, #4] @ get saved 'pc' +load_fp: ldr sv_fp, [frame, #0] @ get saved fp teq sv_fp, mask @ make sure next frame exists beq no_frame @@ -142,7 +142,7 @@ for_each_frame: tst frame, mask @ Check for address exceptions * registers for the current function, but the stacktrace is still printed * properly. */ -1003: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame +load_lr: ldr sv_lr, [sv_fp, #4] @ get saved lr from next frame tst sv_lr, #0 @ If there's no previous lr, beq finished_setup @ we're done. @@ -166,8 +166,7 @@ finished_setup: /* * Print the function (sv_pc) and where it was called from (sv_lr). */ -1004: mov r0, sv_pc - + mov r0, sv_pc mov r1, sv_lr mov r2, frame bic r1, r1, mask @ mask PC/LR for the mode @@ -182,7 +181,7 @@ finished_setup: * pointer the comparison will fail and no registers will print. Unwinding will * continue as if there had been no registers stored in this frame. */ -1005: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, lr} +load_stmfd: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, lr} ldr r3, .Lopcode @ instruction exists, teq r3, r1, lsr #11 ldr r0, [frame] @ locals are stored in @@ -201,7 +200,7 @@ finished_setup: mov frame, sv_fp @ above the current frame bhi for_each_frame -1006: adr r0, .Lbad +bad_frame: adr r0, .Lbad mov r1, loglvl mov r2, frame bl printk @@ -216,11 +215,10 @@ bad_lr: mov sv_fp, #0 ENDPROC(c_backtrace) .pushsection __ex_table,"a" .align 3 - .long 1001b, 1006b - .long 1002b, 1006b - .long 1003b, 1006b - .long 1004b, 1006b - .long 1005b, 1006b + .long load_pc, bad_frame + .long load_fp, bad_frame + .long load_lr, bad_frame + .long load_stmfd, bad_frame .long prev_call, bad_lr .popsection From patchwork Thu Jul 30 20:51:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Desaulniers X-Patchwork-Id: 11693673 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 92DAF1392 for ; Thu, 30 Jul 2020 20:52:25 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6BDB820829 for ; Thu, 30 Jul 2020 20:52:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="2y4pxXtP"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="KNXCOzxZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6BDB820829 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:From:Subject:References:Mime-Version:Message-Id: In-Reply-To:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=1swgbdL1YDjutdLBr8Y5v9+F1J24XKeusp01WOpkm/U=; b=2y4pxXtPD8ONTk68PfYmsrmOn hJ/ppIYfT5jG/h3WigRisgbAdx+4+pNNMVSzlZvTpRz4Lxk4k8xIEv8Y+V8dFksWCXB3UIP2TWzJ1 RZt2h6LucZmY//mIcSlWuExCCvlSCtMzvDYhVxIWScmHq9W2Az1/RMKKcPXHchC6Z6diEE/wV4mNV uTDu113k3QEQfVOhx459frbEkXmhuxeMMDQV8o1FIy3rHXj+MxTdAzJGdo9fCA6lxbcNZc75TvlTt +DSFi1uOH4vIzdCnKxL2FOBzF5TkTixOgLxchFKxHlasWlKrJxQ2TUkbU4D9QbeRUPND+eXNtJdrR ZI7a2GDxQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k1FX7-0004uo-I6; Thu, 30 Jul 2020 20:52:09 +0000 Received: from mail-yb1-xb4a.google.com ([2607:f8b0:4864:20::b4a]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k1FWg-0004iB-3m for linux-arm-kernel@lists.infradead.org; Thu, 30 Jul 2020 20:51:43 +0000 Received: by mail-yb1-xb4a.google.com with SMTP id v11so27863653ybm.22 for ; Thu, 30 Jul 2020 13:51:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=QONIUax01BTjdO9Ra0WL2SaVjevDM7EFtQflcDkiZpw=; b=KNXCOzxZ5pBdanQWFcSr/OXE5B2/MHBDkzE0HeXydXqmchbCVf1W+UZq4r4Psxg/Wk 1DEQowbCu9uiGpRhB/dKS68WmrNs9kpD8hFn8AFd9ehaQ+aESTZaHw/5spbgKV2A8+hh gPvh6rRe3QytXFvyoUDWs9xZdj9sIJaHtZ1y1PJbwcXaIx9mdZ/Y3Xjw9DwXmEjNWo4/ 2UHVOrmwIJ0roULI0LVnH1Rym+desYivmDF40KeGKX9Tl0bEe2Awjztl/Vxjw3CZlc67 sNbngbmuxGMjWzDi+NpTTHb8LppYudA+15WmYdcxDCVNRvEZpo0kOAEryTzieodpJD6r Ikpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=QONIUax01BTjdO9Ra0WL2SaVjevDM7EFtQflcDkiZpw=; b=ZZ4rPyE1fGsbPEAB9XgGjSblzv5XQv3orIjr3IFgcqtm37w82yjMmlYV4ixyEcMMXG FKbHGjNGqrJsL/ZTR4Kf7+mMMqxfZmjdBIOnnf8HotsaRPeF5wzM+gJK129G6qmBITTy RhefSn2BvjQP4q3Psvhlp1twZTEj+ZXBJqr96DExztEDuuDJvN0pjQAISolk7WIpWwvH 60QGUdPZ/3AncFwmNcW3zQD5y/tSphOGudC25dWMhzRYn1FDLCdO0zA08G5EigDg7qCO JJY7ieQ1Po5bIq4R4mxUBOeKh29qONg2HEDiq0GkQSdAs7AmPTkpkbyL0sDpluXaNIha th1w== X-Gm-Message-State: AOAM5314TYRwW2Ajkqy+wKispDE1LS3HKlkpl4OWt0Z6DM4ht14LCmR8 TJCoAcAp9C7UcXXe1BpSDB8A2YZl1Go7lGA1EGo= X-Google-Smtp-Source: ABdhPJxNBCENw+3kJpkaLmevqSScT/aVOmfpWZ+6QdeX2ScuiXo2KHy5MFNiKfuHDYstF0PZx795gbSwSo9qT61KX4Q= X-Received: by 2002:a25:aba2:: with SMTP id v31mr1236236ybi.138.1596142298407; Thu, 30 Jul 2020 13:51:38 -0700 (PDT) Date: Thu, 30 Jul 2020 13:51:12 -0700 In-Reply-To: <20200730205112.2099429-1-ndesaulniers@google.com> Message-Id: <20200730205112.2099429-5-ndesaulniers@google.com> Mime-Version: 1.0 References: <20200730205112.2099429-1-ndesaulniers@google.com> X-Mailer: git-send-email 2.28.0.163.g6104cc2f0b6-goog Subject: [PATCH 4/4] ARM: backtrace: use more descriptive labels From: Nick Desaulniers To: Nathan Huckleberry , Russell King X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200730_165142_254409_75BA22FB X-CRM114-Status: GOOD ( 11.89 ) X-Spam-Score: -7.7 (-------) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-7.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:b4a listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -7.5 USER_IN_DEF_DKIM_WL From: address is in the default DKIM white-list 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.0 DKIMWL_WL_MED DKIMwl.org - Medium sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nick Desaulniers , Chunyan Zhang , Dmitry Safonov <0x7f454c46@gmail.com>, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, Miles Chen , linux-mediatek@lists.infradead.org, Matthias Brugger , Andrew Morton , Lvqiang Huang , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org We don't necessarily need the `b` suffixes used to disambiguate between non-unique local labels. Give these labels more descriptive names. Signed-off-by: Nick Desaulniers --- arch/arm/lib/backtrace.S | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/arch/arm/lib/backtrace.S b/arch/arm/lib/backtrace.S index 872f658638d9..138e961ff033 100644 --- a/arch/arm/lib/backtrace.S +++ b/arch/arm/lib/backtrace.S @@ -37,9 +37,9 @@ ENDPROC(c_backtrace) THUMB( orreq mask, #0x03 ) movne mask, #0 @ mask for 32-bit -1: stmfd sp!, {pc} @ calculate offset of PC stored +store_pc: stmfd sp!, {pc} @ calculate offset of PC stored ldr r0, [sp], #4 @ by stmfd for this CPU - adr r1, 1b + adr r1, store_pc sub offset, r0, r1 /* @@ -60,14 +60,14 @@ ENDPROC(c_backtrace) for_each_frame: tst frame, mask @ Check for address exceptions bne no_frame -1001: ldr sv_pc, [frame, #0] @ get saved pc -1002: ldr sv_fp, [frame, #-12] @ get saved fp +load_pc: ldr sv_pc, [frame, #0] @ get saved pc +load_fp: ldr sv_fp, [frame, #-12] @ get saved fp sub sv_pc, sv_pc, offset @ Correct PC for prefetching bic sv_pc, sv_pc, mask @ mask PC/LR for the mode -1003: ldr r2, [sv_pc, #-4] @ if stmfd sp!, {args} exists, - ldr r3, .Ldsi+4 @ adjust saved 'pc' back one +load_stmfd: ldr r2, [sv_pc, #-4] @ if stmfd sp!, {args} exists, + ldr r3, .Lopcode + 4 @ adjust saved 'pc' back one teq r3, r2, lsr #11 @ instruction subne r0, sv_pc, #4 @ allow for mov subeq r0, sv_pc, #8 @ allow for mov + stmia @@ -79,15 +79,15 @@ for_each_frame: tst frame, mask @ Check for address exceptions bl dump_backtrace_entry ldr r1, [sv_pc, #-4] @ if stmfd sp!, {args} exists, - ldr r3, .Ldsi+4 + ldr r3, .Lopcode + 4 teq r3, r1, lsr #11 ldreq r0, [frame, #-8] @ get sp subeq r0, r0, #4 @ point at the last arg mov r2, loglvl bleq dump_backtrace_stm @ dump saved registers -1004: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, ip, lr, pc} - ldr r3, .Ldsi @ instruction exists, +reload_stmfd: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, ip, lr, pc} + ldr r3, .Lopcode @ instruction exists, teq r3, r1, lsr #11 subeq r0, frame, #16 mov r2, loglvl @@ -100,7 +100,7 @@ for_each_frame: tst frame, mask @ Check for address exceptions mov frame, sv_fp @ above the current frame bhi for_each_frame -1006: adr r0, .Lbad +bad_frame: adr r0, .Lbad mov r1, loglvl mov r2, frame bl printk @@ -109,15 +109,15 @@ ENDPROC(c_backtrace) .pushsection __ex_table,"a" .align 3 - .long 1001b, 1006b - .long 1002b, 1006b - .long 1003b, 1006b - .long 1004b, 1006b + .long load_pc, bad_frame + .long load_fp, bad_frame + .long load_stmfd, bad_frame + .long reload_stmfd, bad_frame .popsection .Lbad: .asciz "%sBacktrace aborted due to bad frame pointer <%p>\n" .align -.Ldsi: .word 0xe92dd800 >> 11 @ stmfd sp!, {... fp, ip, lr, pc} +.Lopcode: .word 0xe92dd800 >> 11 @ stmfd sp!, {... fp, ip, lr, pc} .word 0xe92d0000 >> 11 @ stmfd sp!, {} #endif