Received: by 2002:a05:6a10:6d25:0:0:0:0 with SMTP id gq37csp321944pxb; Sat, 11 Sep 2021 06:14:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyhJZG4Sxa+4BpMhAGCrgQ4VrsrDG/83/fTdth+7KbGp5H/s2TTgU6L66kUOGMvlhcCR3t6 X-Received: by 2002:a50:bb0f:: with SMTP id y15mr3160555ede.159.1631366087701; Sat, 11 Sep 2021 06:14:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631366087; cv=none; d=google.com; s=arc-20160816; b=I5OEwteKWiJxEUlVJN4vW7ffUdsdPFOVcIYI5FBj8T2GcbVNQgouYbADEDsl6jEs8w kgTJEe31ftQ0ouD0gVo2HtTY2XpUrP8QlYLLE5nYvZMh8ECeD7zXRhG/ca42cK6S2wp0 fQm399Ac064vYrvYv+9JPChY///Dhpy0zXuGqCpGVJI/+MpBqJUDPmRiaa+5PIsN0jaQ SyScYeJCSHTVquvvUt4OkkImSywaxsz0ZIWVrkQkBEZdhlcTRkGW3IxF+6Fh9d5DVvYw eWmlEKc7kEAoXsYaUsOoj4nPdfOhvXqLiLPeQ6C8Sjcyo/UgoPbBYJrGJhh9CsqidItK 7BOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LuPHY+rwrvR8J9DXIBoKJfCLFh8Z27BgPM0HEXk0TBI=; b=g91Ml+hxPCp8yqZZL8nuFSIqPD3W/dnoVI8qFnOlLwk7tjW4rptc6DyhYcHgS8tDM7 PQQJMLECNUtbaIL2NHVN5+4zZsLyApQIudHAwWkzNrRncUCmcJUgnZzpyBgBWzzNLyu2 EWfYGWIxWQ/adzUtgFllWX75zqZKdWQIU2N3U0swXs6NSHSq3kNsZ5ctxvaqz3cBSXwj ZXCj+0oKqSH1b/4lNxkSgN5JrqoeO3SXjnjQCoPeb0XxX/L6TGVm8kDL7jSneG0nNDy1 Ih4srsDh+1ypoIPRplHlWU4OBwoGIgCAN6jlCh0E5ZlXzb19+LgWqjBufkvHvVnXah88 MF2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=HJklAisa; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n27si1733453ejl.103.2021.09.11.06.14.23; Sat, 11 Sep 2021 06:14:47 -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=k20201202 header.b=HJklAisa; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236370AbhIKNNs (ORCPT + 99 others); Sat, 11 Sep 2021 09:13:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:37280 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236033AbhIKNNW (ORCPT ); Sat, 11 Sep 2021 09:13:22 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id ED005611C3; Sat, 11 Sep 2021 13:12:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1631365929; bh=EAp12dZdHKtoOUPLP560wfusEhL821UnbrDchRuszKU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HJklAisaCcDY3pq8c4mvMfJyoCpX3C1aks3f0izoqb65RAufPNw7mRIysSC5kimyG d9hEqVPP05ZWsZis/NyOTptD1hhYR/Q6KZ9oEY0hIOgHmRuWBilP+JXydTg++NxcY/ 4ivfIjrIBZeOPhfDCXAMIgOaxzrN+aEUXA3CbzpSYDrfnDTLgvTyRDqX4x9Ft4DPBx cc78QeAsOVqQF8vpsdlnZfm1rY+QxdhxwhFZiUYthQsbdYTLO5vu8vWbSrxjsNopoj Veti7MkK7AUdAow0uZL5dmD7W+6Lm0EqM6bVlZX3CH1dcdXRS8g/d2ASyWggPriAV9 76Edt8nuw+0fg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Masami Hiramatsu , Steven Rostedt , Sasha Levin Subject: [PATCH AUTOSEL 5.14 14/32] tracing/probes: Reject events which have the same name of existing one Date: Sat, 11 Sep 2021 09:11:31 -0400 Message-Id: <20210911131149.284397-14-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210911131149.284397-1-sashal@kernel.org> References: <20210911131149.284397-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Masami Hiramatsu [ Upstream commit 8e242060c6a4947e8ae7d29794af6a581db08841 ] Since kprobe_events and uprobe_events only check whether the other same-type probe event has the same name or not, if the user gives the same name of the existing tracepoint event (or the other type of probe events), it silently fails to create the tracefs entry (but registered.) as below. /sys/kernel/tracing # ls events/task/task_rename enable filter format hist id trigger /sys/kernel/tracing # echo p:task/task_rename vfs_read >> kprobe_events [ 113.048508] Could not create tracefs 'task_rename' directory /sys/kernel/tracing # cat kprobe_events p:task/task_rename vfs_read To fix this issue, check whether the existing events have the same name or not in trace_probe_register_event_call(). If exists, it rejects to register the new event. Link: https://lkml.kernel.org/r/162936876189.187130.17558311387542061930.stgit@devnote2 Signed-off-by: Masami Hiramatsu Signed-off-by: Steven Rostedt (VMware) Signed-off-by: Sasha Levin --- kernel/trace/trace_kprobe.c | 6 +++++- kernel/trace/trace_probe.c | 25 +++++++++++++++++++++++++ kernel/trace/trace_probe.h | 1 + kernel/trace/trace_uprobe.c | 6 +++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index ea6178cb5e33..032191977e34 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -647,7 +647,11 @@ static int register_trace_kprobe(struct trace_kprobe *tk) /* Register new event */ ret = register_kprobe_event(tk); if (ret) { - pr_warn("Failed to register probe event(%d)\n", ret); + if (ret == -EEXIST) { + trace_probe_log_set_index(0); + trace_probe_log_err(0, EVENT_EXIST); + } else + pr_warn("Failed to register probe event(%d)\n", ret); goto end; } diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 15413ad7cef2..0e29bb14fc8b 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -1029,11 +1029,36 @@ int trace_probe_init(struct trace_probe *tp, const char *event, return ret; } +static struct trace_event_call * +find_trace_event_call(const char *system, const char *event_name) +{ + struct trace_event_call *tp_event; + const char *name; + + list_for_each_entry(tp_event, &ftrace_events, list) { + if (!tp_event->class->system || + strcmp(system, tp_event->class->system)) + continue; + name = trace_event_name(tp_event); + if (!name || strcmp(event_name, name)) + continue; + return tp_event; + } + + return NULL; +} + int trace_probe_register_event_call(struct trace_probe *tp) { struct trace_event_call *call = trace_probe_event_call(tp); int ret; + lockdep_assert_held(&event_mutex); + + if (find_trace_event_call(trace_probe_group_name(tp), + trace_probe_name(tp))) + return -EEXIST; + ret = register_trace_event(&call->event); if (!ret) return -ENODEV; diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h index 227d518e5ba5..9f14186d132e 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h @@ -399,6 +399,7 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call, C(NO_EVENT_NAME, "Event name is not specified"), \ C(EVENT_TOO_LONG, "Event name is too long"), \ C(BAD_EVENT_NAME, "Event name must follow the same rules as C identifiers"), \ + C(EVENT_EXIST, "Given group/event name is already used by another event"), \ C(RETVAL_ON_PROBE, "$retval is not available on probe"), \ C(BAD_STACK_NUM, "Invalid stack number"), \ C(BAD_ARG_NUM, "Invalid argument number"), \ diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 9b50869a5ddb..957244ee07c8 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -514,7 +514,11 @@ static int register_trace_uprobe(struct trace_uprobe *tu) ret = register_uprobe_event(tu); if (ret) { - pr_warn("Failed to register probe event(%d)\n", ret); + if (ret == -EEXIST) { + trace_probe_log_set_index(0); + trace_probe_log_err(0, EVENT_EXIST); + } else + pr_warn("Failed to register probe event(%d)\n", ret); goto end; } -- 2.30.2