Received: by 2002:ac0:950c:0:0:0:0:0 with SMTP id f12csp2273613imc; Tue, 12 Mar 2019 10:21:07 -0700 (PDT) X-Google-Smtp-Source: APXvYqwjhaTsXypL6u9iqkJFQ3neHulUfcbG4jigNfcttMKZHwZzZPHnCMSAOMxoO64jaOCvdmCP X-Received: by 2002:a17:902:1347:: with SMTP id r7mr41072414ple.82.1552411267846; Tue, 12 Mar 2019 10:21:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552411267; cv=none; d=google.com; s=arc-20160816; b=auRdLHbOvMUMJWz1o45gT9LGDzwsi1a0Nf9rkCeXFac1dOwW6rhhcnifPXuWAY8FmB gVns2b2l5XJGgPX7J+9hpV5kvlKyyX2qD3cZgkjxchHxR0iDA+JuN0R4NsyHdAfTXIze 1xYRuKRvnbUKYsn9XoT57SspD5qz/14tviDaKIGDNRahONxR/MQMVHFy7R8UxliFdFIF XqOeuL7B4cXNHFr2BIcm3giDFCFxoy19aNCaMmTsbm2N5LVvTHo5aXvfnR5P64sDw9R9 W9NVv1rpA3zgcapxFonCPC4zivxgrM/s0HUe+DAwd0VZXuKBJ8sKIIMZUL7NX01Fay5u yfNQ== 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=jzE1g1WZJrQJR32T4yg3au5eWouFH4kUo4dmDXq7Kfk=; b=cdDY3iXCiEBYqvzoOB+1lD21+rt/KRRrcsr/R7HfUXf5QN9NyNfXdLjMjcodkdUvwX QiYfh+Gxd9j9raa1nrURs8h6Yzz19Jki7Tx7Y2cXHq3wIjgAmimVYPVScsGewpfToy6v FARFEH2NFuS7htkxTXh8o+M6k6F9dgzDFRk9DKct66PV62PYYDSBuhfzZl+hVLdBW6vy Dq+Kw7IMHNJi4d3KJjR5zJn7CdGU9MLcBHxd5asIS76TvrZWGL3dYzfedv5jt2HpltWY xfCluYz5hYT99JTZoUH1UkkTJ6azD6RhJ6+W1zkDUYyUJqhDOj/mBHM2Uh/4529jAKYX ARnQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=cE2qRUlV; 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 k3si8418313plt.342.2019.03.12.10.20.52; Tue, 12 Mar 2019 10:21:07 -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=cE2qRUlV; 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 S1730194AbfCLRS7 (ORCPT + 99 others); Tue, 12 Mar 2019 13:18:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:35474 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729979AbfCLRSM (ORCPT ); Tue, 12 Mar 2019 13:18:12 -0400 Received: from localhost (unknown [104.133.8.98]) (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 3938B206DF; Tue, 12 Mar 2019 17:18:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1552411092; bh=g93+PPOcNcMixw48RymxLC9ys/+odly9dcmA2T+GXY0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cE2qRUlVw8Qxap/IIBLTalaKKzZx2zLUQ9YmR6exJ7A+vd4LrEINXaJQLg3YTUQTl tqHXmRYxonGZOoET68/WpJo6QRfN15k42GSW5c8Hm6rEKHPJJW0/q98NCIL/BXNi1P eWoLLXWgmXTHbZBDDIq0K8X53wSwbHohT4bEUHuw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vincent Whitchurch , Russell King , Sasha Levin Subject: [PATCH 4.9 92/96] ARM: 8781/1: Fix Thumb-2 syscall return for binutils 2.29+ Date: Tue, 12 Mar 2019 10:10:50 -0700 Message-Id: <20190312171041.403754083@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190312171034.530434962@linuxfoundation.org> References: <20190312171034.530434962@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 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit afc9f65e01cd114cb2cedf544d22239116ce0cc6 ] When building the kernel as Thumb-2 with binutils 2.29 or newer, if the assembler has seen the .type directive (via ENDPROC()) for a symbol, it automatically handles the setting of the lowest bit when the symbol is used with ADR. The badr macro on the other hand handles this lowest bit manually. This leads to a jump to a wrong address in the wrong state in the syscall return path: Internal error: Oops - undefined instruction: 0 [#2] SMP THUMB2 Modules linked in: CPU: 0 PID: 652 Comm: modprobe Tainted: G D 4.18.0-rc3+ #8 PC is at ret_fast_syscall+0x4/0x62 LR is at sys_brk+0x109/0x128 pc : [<80101004>] lr : [<801c8a35>] psr: 60000013 Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none Control: 50c5387d Table: 9e82006a DAC: 00000051 Process modprobe (pid: 652, stack limit = 0x(ptrval)) 80101000 : 80101000: b672 cpsid i 80101002: f8d9 2008 ldr.w r2, [r9, #8] 80101006: f1b2 4ffe cmp.w r2, #2130706432 ; 0x7f000000 80101184 : 80101184: f8d9 a000 ldr.w sl, [r9] 80101188: e92d 0030 stmdb sp!, {r4, r5} 8010118c: f01a 0ff0 tst.w sl, #240 ; 0xf0 80101190: d117 bne.n 801011c2 <__sys_trace> 80101192: 46ba mov sl, r7 80101194: f5ba 7fc8 cmp.w sl, #400 ; 0x190 80101198: bf28 it cs 8010119a: f04f 0a00 movcs.w sl, #0 8010119e: f3af 8014 nop.w {20} 801011a2: f2af 1ea2 subw lr, pc, #418 ; 0x1a2 To fix this, add a new symbol name which doesn't have ENDPROC used on it and use that with badr. We can't remove the badr usage since that would would cause breakage with older binutils. Signed-off-by: Vincent Whitchurch Signed-off-by: Russell King Signed-off-by: Sasha Levin --- arch/arm/kernel/entry-common.S | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -32,6 +32,7 @@ * features make this path too inefficient. */ ret_fast_syscall: +__ret_fast_syscall: UNWIND(.fnstart ) UNWIND(.cantunwind ) disable_irq_notrace @ disable interrupts @@ -57,6 +58,7 @@ fast_work_pending: * r0 first to avoid needing to save registers around each C function call. */ ret_fast_syscall: +__ret_fast_syscall: UNWIND(.fnstart ) UNWIND(.cantunwind ) str r0, [sp, #S_R0 + S_OFF]! @ save returned r0 @@ -223,7 +225,7 @@ local_restart: tst r10, #_TIF_SYSCALL_WORK @ are we tracing syscalls? bne __sys_trace - invoke_syscall tbl, scno, r10, ret_fast_syscall + invoke_syscall tbl, scno, r10, __ret_fast_syscall add r1, sp, #S_OFF 2: cmp scno, #(__ARM_NR_BASE - __NR_SYSCALL_BASE)