From patchwork Sat Dec 10 14:03:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 32038 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1341505wrr; Sat, 10 Dec 2022 06:34:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf4O84wUQ6TaA/tad7w6/7TLwyQOuCF4WxG3cki8fDegNbR/9rvx4fUEOi+1PY062M13hjkW X-Received: by 2002:a05:6402:3646:b0:45c:a5f2:ffea with SMTP id em6-20020a056402364600b0045ca5f2ffeamr9427408edb.7.1670681734112; Sat, 10 Dec 2022 06:15:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670681734; cv=none; d=google.com; s=arc-20160816; b=Hd5y6OH7NIlPE5bQ/ZF6tfmLeyqql50MRUtZpFY13M2OuCKYlNUfQ8e8xaJxG1AUn5 XcDiKHO64wdw3cdOgttflgx+H790CDkRySBKxwhKL/8bUYt9dMzOkvo7+fC0XQxVtUyP ybij+DY2pG93a6P0pOWTC4HwS/Af2IC7NbZ+BOtOnuxs6zFkl5xHMujGnDatj0bJUkSi WmvaO89dVDEggSCuyNxolDGNwD2ULgFO9OI8+AItU2ASn/ObOcV3fHfGhoxJsSWV7ISA IDGc/YkTTRM0ZDDffE0zdLPsZS3V2KPXUmVy86L+RNUm6Njo+2/1sGTvHOKMVpS4Ud4x UI0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=x1VsP2zPZYGCdmtwtOZYR7abc4KJc5fwT7pIdgXuy98=; b=FULIaONkLmnvgnrOq3duRpQk/sGZAO7WKF+yc0DfXkwMA8tV4VNELJQekDHYdRNP7Z WfZEMtksur92jZU8Wo1GI0LxMpFYtaNtgt5kC7oap4z9TQsfhySiYcRCq/kuPJv8GkND I1K0vyrf2KGc+DWXGLp3NeCnPrqgrsi9H4ojJEzggVsKrpqqanYksmv8a4P2DpTnbLLx JnYyhoCnJYMt9QZ42WlheZ/9AvQUoDjTf7AaBzoF1yzpIp/md9hLceXtkFtSxNbtf5ig r+79FPFMK6dJgjRrfQsLmt0hHRvsquEaNhZ5+VIpwcdjWacRdIfNRuKNlh+SvG3H48g1 uvUQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ji15-20020a170907980f00b007c0b03b23b5si2469888ejc.542.2022.12.10.06.15.11; Sat, 10 Dec 2022 06:15:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229914AbiLJOHn (ORCPT + 99 others); Sat, 10 Dec 2022 09:07:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230048AbiLJOGx (ORCPT ); Sat, 10 Dec 2022 09:06:53 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 917791BE98; Sat, 10 Dec 2022 06:03:56 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 38701B82A56; Sat, 10 Dec 2022 14:03:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DAC70C433D2; Sat, 10 Dec 2022 14:03:53 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.96) (envelope-from ) id 1p40SG-000l40-39; Sat, 10 Dec 2022 09:03:52 -0500 Message-ID: <20221210140352.840122725@goodmis.org> User-Agent: quilt/0.66 Date: Sat, 10 Dec 2022 09:03:21 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Andrew Morton , stable@vger.kernel.org, Rafael Mendonca Subject: [for-next][PATCH 1/3] tracing: Fix race where eprobes can be called before the event References: <20221210140320.609495935@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751836769954224167?= X-GMAIL-MSGID: =?utf-8?q?1751836769954224167?= From: "Steven Rostedt (Google)" The flag that tells the event to call its triggers after reading the event is set for eprobes after the eprobe is enabled. This leads to a race where the eprobe may be triggered at the beginning of the event where the record information is NULL. The eprobe then dereferences the NULL record causing a NULL kernel pointer bug. Test for a NULL record to keep this from happening. Link: https://lore.kernel.org/linux-trace-kernel/20221116192552.1066630-1-rafaelmendsr@gmail.com/ Link: https://lore.kernel.org/all/20221117214249.2addbe10@gandalf.local.home/ Cc: stable@vger.kernel.org Fixes: 7491e2c442781 ("tracing: Add a probe that attaches to trace events") Reported-by: Rafael Mendonca Signed-off-by: Steven Rostedt (Google) Acked-by: Masami Hiramatsu (Google) Signed-off-by: Masami Hiramatsu (Google) --- kernel/trace/trace_eprobe.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index 123d2c0a6b68..352b65e2b910 100644 --- a/kernel/trace/trace_eprobe.c +++ b/kernel/trace/trace_eprobe.c @@ -564,6 +564,9 @@ static void eprobe_trigger_func(struct event_trigger_data *data, { struct eprobe_data *edata = data->private_data; + if (unlikely(!rec)) + return; + __eprobe_trace_func(edata, rec); } From patchwork Sat Dec 10 14:03:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 32044 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp1357693wrr; Sat, 10 Dec 2022 07:13:56 -0800 (PST) X-Google-Smtp-Source: AA0mqf5waSluHxs/29fksoOvSEl9wfVUJn7Fcc8E6DvRf2Ggv6bkbbpq74s0jXZBKPOM8PQCucGh X-Received: by 2002:a05:6a20:54a5:b0:aa:3e5f:88ab with SMTP id i37-20020a056a2054a500b000aa3e5f88abmr13863555pzk.54.1670681682557; Sat, 10 Dec 2022 06:14:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670681682; cv=none; d=google.com; s=arc-20160816; b=dYWIvaMlMpUh/JLhikFZaLtWfHki/Uxn9jNQT/7I4TZIfk3RNQ+eqeBMnByS7e5Rzf whS8XHtutshK+HxSc+m/EjB68t9q1AQ5JU1YO7rvFMU2pDv1537FY6Zqlm6+9HfOxewp BpShk1fSGzaEx12LmNSE/KGqcez8Xeie9njuORVBOyqmA0fiV+NhQtZ6b0Jhs67454ZH Ca11ynwQj4omjkX5yfPGoQrJEclttqz4y8CMBZG2yqmgdVRdeG6yT7MZG64ZMtdxx6IQ L20sSyiOOWVLk1/k5bJ7TCslCBfDdPw9OMRC/jx+jFwdGfn7++yTmfewmaJcla/vP7Eg LkLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=3gfcQ0F1DJIsxQ5K7/1zTHLhzuIhJ+w3COKc9QPRVzI=; b=uupKZ9N2t/8I53fmdj1pKyYQGYmXmGIizBNYCYEt2YLgo/rv5HhzkUTaRUXbRZWI+L sjD42WHgeXo4L/ac5g1bjA580wsUmLBQu0/l3XzXM8GhSzReWnGCNfbupwbkjDhAtapL 6dXy0Fy8ZJ+zeOatWASwr2BxamhzB/LDuatQIgTWcdZW8c7ZYK+7nGLPGdTpcCBHjGcP hg/tblWmYkiwQ1M+7Ok3oN7xhlIKHuZ2HKXTtCFpMaoyREoqkAAbS48WPC1zQzpdvvHI 5q/77TrCDQXuhGYkcXUWZB0NY9OcrzkEr9SvXHsR5o6GblUJFGJS18112HkMGuw9Hegy 1zFA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 21-20020a631355000000b0044c3ec9ea71si4378685pgt.630.2022.12.10.06.14.29; Sat, 10 Dec 2022 06:14:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229901AbiLJOHj (ORCPT + 99 others); Sat, 10 Dec 2022 09:07:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230045AbiLJOGx (ORCPT ); Sat, 10 Dec 2022 09:06:53 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 384061BE8D for ; Sat, 10 Dec 2022 06:03:55 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id C526960C24 for ; Sat, 10 Dec 2022 14:03:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D4AEC433F0; Sat, 10 Dec 2022 14:03:54 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.96) (envelope-from ) id 1p40SH-000l4y-0w; Sat, 10 Dec 2022 09:03:53 -0500 Message-ID: <20221210140353.153775027@goodmis.org> User-Agent: quilt/0.66 Date: Sat, 10 Dec 2022 09:03:23 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Andrew Morton , Li Huafei Subject: [for-next][PATCH 3/3] kprobes: Fix check for probe enabled in kill_kprobe() References: <20221210140320.609495935@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751836715857756587?= X-GMAIL-MSGID: =?utf-8?q?1751836715857756587?= From: Li Huafei In kill_kprobe(), the check whether disarm_kprobe_ftrace() needs to be called always fails. This is because before that we set the KPROBE_FLAG_GONE flag for kprobe so that "!kprobe_disabled(p)" is always false. The disarm_kprobe_ftrace() call introduced by commit: 0cb2f1372baa ("kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler") to fix the NULL pointer reference problem. When the probe is enabled, if we do not disarm it, this problem still exists. Fix it by putting the probe enabled check before setting the KPROBE_FLAG_GONE flag. Link: https://lore.kernel.org/all/20221126114316.201857-1-lihuafei1@huawei.com/ Fixes: 3031313eb3d54 ("kprobes: Fix to check probe enabled before disarm_kprobe_ftrace()") Signed-off-by: Li Huafei Acked-by: Masami Hiramatsu (Google) Reviewed-by: Steven Rostedt (Google) Signed-off-by: Masami Hiramatsu (Google) --- kernel/kprobes.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 3050631e528d..a35074f0daa1 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -2364,6 +2364,14 @@ static void kill_kprobe(struct kprobe *p) lockdep_assert_held(&kprobe_mutex); + /* + * The module is going away. We should disarm the kprobe which + * is using ftrace, because ftrace framework is still available at + * 'MODULE_STATE_GOING' notification. + */ + if (kprobe_ftrace(p) && !kprobe_disabled(p) && !kprobes_all_disarmed) + disarm_kprobe_ftrace(p); + p->flags |= KPROBE_FLAG_GONE; if (kprobe_aggrprobe(p)) { /* @@ -2380,14 +2388,6 @@ static void kill_kprobe(struct kprobe *p) * the original probed function (which will be freed soon) any more. */ arch_remove_kprobe(p); - - /* - * The module is going away. We should disarm the kprobe which - * is using ftrace, because ftrace framework is still available at - * 'MODULE_STATE_GOING' notification. - */ - if (kprobe_ftrace(p) && !kprobe_disabled(p) && !kprobes_all_disarmed) - disarm_kprobe_ftrace(p); } /* Disable one kprobe */