Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp1972424ybh; Tue, 14 Jul 2020 12:00:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw1Z6GXCzcFgv6HkNooQTdgqmGg7s2yvgrmO1zyKi3Um8BahCT9BEO59LKRpVOxgX9e+6ih X-Received: by 2002:a17:906:4086:: with SMTP id u6mr6209865ejj.9.1594753252131; Tue, 14 Jul 2020 12:00:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594753252; cv=none; d=google.com; s=arc-20160816; b=kT2pEa0WF4dWRT6BsZc2ovjR/7cfgd6gJhQZpe+kppjUuiME5OkmuY0v5A/pquphOH vj7sMHYGWWuHVbyduhskd4W5FRrRt86kDdy8KWcxy0rDirkHZ49cpkJ3j9JdUmDTG5fn qesrWFqE2qLNfYzLBtfr9qty3dXF0DU2KY9gIIsZo6TWo4VadPObvlfYUSUSL0W+Lz+c 50nyDhzUci0UJT6DnA6OAHCO0VN5UXG1cFlBSSjBqNStLSvTn4kfGRw1tYAzbLMIS7n9 ERswrf9yk6pprZoQ4otkTDISxZsdqZfVirGpzD7eF8TfveQdPgju0/4fBAENMfEnJ8O4 F8Ig== 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=iOKP2fqRbt+IAP2SlG2W3Xb4xL33Q8KoYk9HwVPUyzE=; b=t/JM3u/8Vw0/cLGbvMkgYHYYmB07oZ+s68jepomAudsS5+63SAM+s65awYFVw9tQpT kiOT0sjvaTiRfH+Mv3ZeprcaPLEzjLuR1TjwDOESVuMUlvKgUaPFW+T74UwE+z2xjulg qar9MNEgWND/kw7TNWck17A4g7lXLvRrC6nNMteJcQsuVvZhfFN5L8TpWgaklgewkw5K 95wZQ+jpiAjDkawFEnKkHR91F2zJ2m71sX0B1kt1By6cnMUmYjoLQ2fiBPpi0Uh6a+Fp KivKwQs8ehGBCIp5Ryoj5mncgov4hQWmvvwVOM0EXgjmTOXyxLtD+xgOK/AKlKLMPNtD XZEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="tZJ/iGfD"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l11si11629251edq.493.2020.07.14.12.00.28; Tue, 14 Jul 2020 12:00:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="tZJ/iGfD"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731321AbgGNS76 (ORCPT + 99 others); Tue, 14 Jul 2020 14:59:58 -0400 Received: from mail.kernel.org ([198.145.29.99]:58550 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730095AbgGNS7v (ORCPT ); Tue, 14 Jul 2020 14:59:51 -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 DC8E322507; Tue, 14 Jul 2020 18:59:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594753191; bh=a/AvI4JLbcTpd/DhvqdT62V8sjX5jgoH9AEd0SneJ3o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tZJ/iGfDMKgY0Ri2HEMNbHuJbarY3/Cu16blv2M++qyI6uTxwD1ts/L9UkRLP8RHM vWAYEkwtzThqSdQuXuNulSjlNld7aGV9rfXZzD8/9CUdAR782P4jy4xFSIvvI68caI 5LURNb8NvAtAfrH252BTz3+eX3Jj3fRIK2EzRiHY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vineet Gupta Subject: [PATCH 5.7 153/166] ARC: entry: fix potential EFA clobber when TIF_SYSCALL_TRACE Date: Tue, 14 Jul 2020 20:45:18 +0200 Message-Id: <20200714184123.151075690@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200714184115.844176932@linuxfoundation.org> References: <20200714184115.844176932@linuxfoundation.org> User-Agent: quilt/0.66 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 From: Vineet Gupta commit 00fdec98d9881bf5173af09aebd353ab3b9ac729 upstream. Trap handler for syscall tracing reads EFA (Exception Fault Address), in case strace wants PC of trap instruction (EFA is not part of pt_regs as of current code). However this EFA read is racy as it happens after dropping to pure kernel mode (re-enabling interrupts). A taken interrupt could context-switch, trigger a different task's trap, clobbering EFA for this execution context. Fix this by reading EFA early, before re-enabling interrupts. A slight side benefit is de-duplication of FAKE_RET_FROM_EXCPN in trap handler. The trap handler is common to both ARCompact and ARCv2 builds too. This just came out of code rework/review and no real problem was reported but is clearly a potential problem specially for strace. Cc: Signed-off-by: Vineet Gupta Signed-off-by: Greg Kroah-Hartman --- arch/arc/kernel/entry.S | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) --- a/arch/arc/kernel/entry.S +++ b/arch/arc/kernel/entry.S @@ -165,7 +165,6 @@ END(EV_Extension) tracesys: ; save EFA in case tracer wants the PC of traced task ; using ERET won't work since next-PC has already committed - lr r12, [efa] GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11 st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address @@ -208,15 +207,9 @@ tracesys_exit: ; Breakpoint TRAP ; --------------------------------------------- trap_with_param: - - ; stop_pc info by gdb needs this info - lr r0, [efa] + mov r0, r12 ; EFA in case ptracer/gdb wants stop_pc mov r1, sp - ; Now that we have read EFA, it is safe to do "fake" rtie - ; and get out of CPU exception mode - FAKE_RET_FROM_EXCPN - ; Save callee regs in case gdb wants to have a look ; SP will grow up by size of CALLEE Reg-File ; NOTE: clobbers r12 @@ -243,6 +236,10 @@ ENTRY(EV_Trap) EXCEPTION_PROLOGUE + lr r12, [efa] + + FAKE_RET_FROM_EXCPN + ;============ TRAP 1 :breakpoints ; Check ECR for trap with arg (PROLOGUE ensures r10 has ECR) bmsk.f 0, r10, 7 @@ -250,9 +247,6 @@ ENTRY(EV_Trap) ;============ TRAP (no param): syscall top level - ; First return from Exception to pure K mode (Exception/IRQs renabled) - FAKE_RET_FROM_EXCPN - ; If syscall tracing ongoing, invoke pre-post-hooks GET_CURR_THR_INFO_FLAGS r10 btst r10, TIF_SYSCALL_TRACE