Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp198386ybh; Fri, 6 Mar 2020 19:29:27 -0800 (PST) X-Google-Smtp-Source: ADFU+vtbTrqbXaC0ThmtLaNlzv3La/8TUjDIVht3OyjbuaOpkYf0A3ZQCa+pYerojPjrnaSc1d/H X-Received: by 2002:a05:6830:1bc3:: with SMTP id v3mr5330396ota.310.1583551767011; Fri, 06 Mar 2020 19:29:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583551767; cv=none; d=google.com; s=arc-20160816; b=DhCgg9h/sZEgcOSzmo4A1iwLiQ93Jz+pT1RCJOKywjzPF+LvbvP+qJwcnGe3VDRIql /jpLWXXFl5onR0tFtQlVNknnQKIRotVK9+qnG4CykvZqJY1jCt9ecocWp8+FGQWYITyq TNe4g0YdaIqeFftpCDi0q3qNgGBL3EXPq1ZDbQ8pkZ443SOPF2NRCFbM2/Mc+m+jcVf+ 5NuHi8FtddF3+iRirHnSpvjafI83uaBeIaKv5sPxs6TjadQll5OtTNO4hOjkjsUHWkPS J+3VBlCf1BENsyv2ZzByaasGSAs4bL7f0s53qN74iqNgCF/D5mvZEdLtP6tvLygYJ9C6 XbvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:reply-to:message-id :subject:cc:to:from:date:dkim-signature; bh=3Srzx97RJ3i5bUm9DkXnTipLmLmhqedyM4I7M379ur4=; b=PSYeXC2p2RL4jH7lzC6blvae6QvNvbjwBlS+foyifcLNoC5hjIelIU2awXKxcy2Ylb rGWpaElPYiex3La9N7YbuVcxngIO/Bl9hXVA72JDIo0VwrmllgEGAiQOs9254zo25nI1 /K/gpYDriW8a6FZMQdeMUqCHYll6ilx23lAjBokg80VFOXfnpOlF0azGlwU/w4B0/VU+ Cx2v+wKPzYqCbaT8Mp2B1tpENL6uZMpiKF1ROF3euzAvnfUUfipVaAm8DWWdlUzQnb88 QDwVtE1FX5SS16IewvskvpG1LqcMU33+3kL7UzMtN90zd9BmDPV8AoHapYQNMumHDvj4 e85w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=e0pG0Nzw; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v92si2487842otb.160.2020.03.06.19.29.14; Fri, 06 Mar 2020 19:29:26 -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=@kernel.org header.s=default header.b=e0pG0Nzw; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726704AbgCGD2c (ORCPT + 99 others); Fri, 6 Mar 2020 22:28:32 -0500 Received: from mail.kernel.org ([198.145.29.99]:41616 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726237AbgCGD2c (ORCPT ); Fri, 6 Mar 2020 22:28:32 -0500 Received: from paulmck-ThinkPad-P72.home (50-39-105-78.bvtn.or.frontiernet.net [50.39.105.78]) (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 5E0572070A; Sat, 7 Mar 2020 03:28:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583551711; bh=l+DjaWOcf96PINwu+Y8AEdSQCqfgSRPWU6rpwIIkx20=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To:From; b=e0pG0NzwOssUXpGRus482G4TjtXzzIxZvbjgN15uTuyiXl9BrT1IJnRUIHGJmOEH7 Ww0yVK39ZBYwZ+InhdSfc1t4Hhm7hV+ou1wTRXpJ9avzEjloftm92Umtm1F6uttCOw 2yPZUs2ZgKSM1j7+jV6dwlQJ7vFod8V2E0SYxeO4= Received: by paulmck-ThinkPad-P72.home (Postfix, from userid 1000) id 2957F3522891; Fri, 6 Mar 2020 19:28:31 -0800 (PST) Date: Fri, 6 Mar 2020 19:28:31 -0800 From: "Paul E. McKenney" To: Masami Hiramatsu Cc: Ingo Molnar , Peter Zijlstra , Joel Fernandes , Steven Rostedt , linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, gregkh@linuxfoundation.org, gustavo@embeddedor.com, tglx@linutronix.de, josh@joshtriplett.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, stable@vger.kernel.org Subject: Re: [PATCH] x86/kprobes: Prohibit probing on rcu_nmi_exit() and ist_exit() Message-ID: <20200307032831.GL2935@paulmck-ThinkPad-P72> Reply-To: paulmck@kernel.org References: <158355013189.14191.9105069890402942867.stgit@devnote2> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <158355013189.14191.9105069890402942867.stgit@devnote2> User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Mar 07, 2020 at 12:02:12PM +0900, Masami Hiramatsu wrote: > Prohibit probing on rcu_nmi_exit() and ist_exit() which > are called from do_int3()'s kprobe path after kprobe_int3_handler(). > > The commit c13324a505c7 ("x86/kprobes: Prohibit probing on > functions before kprobe_int3_handler()") tried to fix similar > issue, but it only marks the functions before kprobe_int3_handler() > in do_int3(). > > If we put a kprobe on rcu_nmi_exit() or ist_exit(), the kprobes > will detect reentrance. However, it only skips the kprobe handler, > exits from do_int3() and hits ist_exit() and rcu_nmi_exit() again. > Thus, it causes another int3 exception and finally we will get > the kernel panic with "Unrecoverable kprobe detected." error message. > > This is reproducible by the following commands. > > / # echo 0 > /proc/sys/debug/kprobes-optimization > / # echo p vfs_read > /sys/kernel/debug/tracing/kprobe_events > / # echo p rcu_nmi_exit >> /sys/kernel/debug/tracing/kprobe_events > / # echo 1 > /sys/kernel/debug/tracing/events/kprobes/enable > > Fixes: c13324a505c7 ("x86/kprobes: Prohibit probing on functions before kprobe_int3_handler()") > Signed-off-by: Masami Hiramatsu > Cc: stable@vger.kernel.org From an RCU perspective: Reviewed-by: Paul E. McKenney > --- > arch/x86/kernel/traps.c | 1 + > kernel/rcu/tree.c | 1 + > 2 files changed, 2 insertions(+) > > diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c > index 6ef00eb6fbb9..c63fb7697794 100644 > --- a/arch/x86/kernel/traps.c > +++ b/arch/x86/kernel/traps.c > @@ -115,6 +115,7 @@ void ist_exit(struct pt_regs *regs) > if (!user_mode(regs)) > rcu_nmi_exit(); > } > +NOKPROBE_SYMBOL(ist_exit); > > /** > * ist_begin_non_atomic() - begin a non-atomic section in an IST exception > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c > index d91c9156fab2..c49ea0e919f9 100644 > --- a/kernel/rcu/tree.c > +++ b/kernel/rcu/tree.c > @@ -670,6 +670,7 @@ void rcu_nmi_exit(void) > { > rcu_nmi_exit_common(false); > } > +NOKPROBE_SYMBOL(rcu_nmi_exit); > > /** > * rcu_irq_exit - inform RCU that current CPU is exiting irq towards idle >