Received: by 2002:ab2:2994:0:b0:1ef:ca3e:3cd5 with SMTP id n20csp591414lqb; Thu, 14 Mar 2024 23:58:46 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWI1qgVSSiUdabnorpxRwasHRiYQb6s9IfjhftaqFyW9crC/fZ3GUHuLwzlRf4J50RplK6RqZmYZ63OoXQBcQtVddB0dYwPVpi/0sf5oQ== X-Google-Smtp-Source: AGHT+IETMJfC55U/IJJ2USKiKJRbcuJUIPq5ItTg9MToEmswSSF3pK4roteCEdUxQrWGQeSRclAw X-Received: by 2002:a05:6214:8d2:b0:691:51d4:c40c with SMTP id da18-20020a05621408d200b0069151d4c40cmr3303818qvb.18.1710485926046; Thu, 14 Mar 2024 23:58:46 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710485926; cv=pass; d=google.com; s=arc-20160816; b=t4wrbCq8GKVQk0LVL1KDSEFyiH1Plxpa+WKVnKbKgLXrB1Jul04FDFn7q6f4Spt/OT Ko7p3CIFLoV+N/HPz2OHEZKRrDW1mi7KJlIqTe7yzrrypcBoyH6d16G94d5BMMwvul/1 VG0hq0QmPK2budKPe0lc+PMCusK/qVhC/ykpLOA9NTdypk1rAbalXwH0jbKbKBe0KU26 EWhNvnKT73GJJqSF2aRK30Cjnm9rn4cyGqiSXaHXj8KfwqihHHS/bot8adt6R1CYU3mi cj4WKbF7PTZt0dUUxUZPaOVeg3guT+L1LgI/NwEBxhoAQsXEDLfrb02uP0bQ8ZZ1Xe+9 T6Pg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=Ws4gRtWSDB0lHdDhfsyVnbxe9d9DU7Y4M0Az1j8Zrm8=; fh=Us/DORbzHj5XmgnBeJW+VlCBdo2pSXKHAejHonylCvY=; b=aBVYNneau6Y3H6Jdv3JQPvcSfsqTxYocrikVjKopbyDtrdylLfDb4XxGMXGL1haltl 1E0RoGnRvbbky7NOT6cNPVeAfB/M6QeZNar/IroHdl9dW4g4TB5t2mOnX+v6vVFd/Fze BcTZaEUeu0HPCy1V1Xvv0nZ8zKSiix+W7aZbt4XwvfAHuYOcjgGA/HZPBuSLHQSTAI9X /b0BNoZcjRKjIrUIDQe0+AT9SlLTGAYSMuwtow8QmOb0L2vSvgobQ9nSFG7CZud1j3mv f5u0qYCKYI+HsIll2iZQvnvCVrp8qFwvrVeyvziI79DRfMvgbhmTLu1UJzDQ+1OAlhz1 i6XA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=huawei.com dmarc=pass fromdomain=huawei.com); spf=pass (google.com: domain of linux-kernel+bounces-104092-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-104092-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id 14-20020a0562140d6e00b0068ccc1e5d6csi2281727qvs.41.2024.03.14.23.58.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Mar 2024 23:58:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-104092-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=huawei.com dmarc=pass fromdomain=huawei.com); spf=pass (google.com: domain of linux-kernel+bounces-104092-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-104092-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id AF1CE1C20E34 for ; Fri, 15 Mar 2024 06:58:45 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 124011400B; Fri, 15 Mar 2024 06:54:23 +0000 (UTC) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9DCA68BEA; Fri, 15 Mar 2024 06:54:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710485662; cv=none; b=Ouch9V04tP2lgfhMyF+oxo5JeZWX6ju1ZwQiBEu7nTJUQPWESIBCSQoF95pbWKobeaK5j8a6MWOEznkIII8d02EqXfVVwQW5JfNr1/8U4E9beV3NZ9a/7/Y35nlXY5xrDw3bgxq+0yrzW78pGSniZgy79vpdhYbr8+LaQXsRSAg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710485662; c=relaxed/simple; bh=vrLjDY7iYTglWbIF9byAN3ZdVSQfDDmsDWsXScSYCLA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qCMVi1a5crw5A23MmwBvvC52v7rpa9E2alQ4zfuYikFCUykNvDC3IUTkygulFAkxmEfDWdx1fG1olcSyguwL1FyDxx9Z7hcF41nfQ2jaCvsGg21o6JWSd6qgQUaL9y6n7n7pwH0dyxxKoKwBzUtRzbCaS+CIBicR91n7LSosUus= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.190 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Tww0v14KZz1xqfr; Fri, 15 Mar 2024 14:52:31 +0800 (CST) Received: from canpemm500010.china.huawei.com (unknown [7.192.105.118]) by mail.maildlp.com (Postfix) with ESMTPS id 6CD5D1A016F; Fri, 15 Mar 2024 14:54:18 +0800 (CST) Received: from huawei.com (10.175.127.227) by canpemm500010.china.huawei.com (7.192.105.118) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Fri, 15 Mar 2024 14:54:17 +0800 From: Ye Bin To: , , , CC: , Subject: [PATCH v6 1/8] tracing/probes: add traceprobe_expand_dentry_args() helper Date: Fri, 15 Mar 2024 14:55:33 +0800 Message-ID: <20240315065540.1181879-2-yebin10@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20240315065540.1181879-1-yebin10@huawei.com> References: <20240315065540.1181879-1-yebin10@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To canpemm500010.china.huawei.com (7.192.105.118) Add traceprobe_expand_dentry_args() to expand dentry args. this API is prepare to support "%pd" print format for kprobe. Signed-off-by: Ye Bin --- kernel/trace/trace_probe.c | 50 ++++++++++++++++++++++++++++++++++++++ kernel/trace/trace_probe.h | 2 ++ 2 files changed, 52 insertions(+) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 34289f9c6707..a27567e16c36 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -1569,6 +1569,56 @@ const char **traceprobe_expand_meta_args(int argc, const char *argv[], return ERR_PTR(ret); } +/* @buf: *buf must be equal to NULL. Caller must to free *buf */ +int traceprobe_expand_dentry_args(int argc, const char *argv[], char **buf) +{ + int i, used, ret; + const int bufsize = MAX_DENTRY_ARGS_LEN; + char *tmpbuf = NULL; + + if (*buf) + return -EINVAL; + + used = 0; + for (i = 0; i < argc; i++) { + if (glob_match("*:%pd", argv[i])) { + char *tmp; + char *equal; + + if (!tmpbuf) { + tmpbuf = kmalloc(bufsize, GFP_KERNEL); + if (!tmpbuf) + return -ENOMEM; + } + + tmp = kstrdup(argv[i], GFP_KERNEL); + if (!tmp) + goto nomem; + + equal = strchr(tmp, '='); + if (equal) + *equal = '\0'; + tmp[strlen(argv[i]) - 4] = '\0'; + ret = snprintf(tmpbuf + used, bufsize - used, + "%s%s+0x0(+0x%zx(%s)):string", + equal ? tmp : "", equal ? "=" : "", + offsetof(struct dentry, d_name.name), + equal ? equal + 1 : tmp); + kfree(tmp); + if (ret >= bufsize - used) + goto nomem; + argv[i] = tmpbuf + used; + used += ret + 1; + } + } + + *buf = tmpbuf; + return 0; +nomem: + kfree(tmpbuf); + return -ENOMEM; +} + void traceprobe_finish_parse(struct traceprobe_parse_context *ctx) { clear_btf_context(ctx); diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h index c1877d018269..3d22fba4b63f 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h @@ -34,6 +34,7 @@ #define MAX_ARRAY_LEN 64 #define MAX_ARG_NAME_LEN 32 #define MAX_BTF_ARGS_LEN 128 +#define MAX_DENTRY_ARGS_LEN 256 #define MAX_STRING_SIZE PATH_MAX #define MAX_ARG_BUF_LEN (MAX_TRACE_ARGS * MAX_ARG_NAME_LEN) @@ -402,6 +403,7 @@ extern int traceprobe_parse_probe_arg(struct trace_probe *tp, int i, const char **traceprobe_expand_meta_args(int argc, const char *argv[], int *new_argc, char *buf, int bufsize, struct traceprobe_parse_context *ctx); +extern int traceprobe_expand_dentry_args(int argc, const char *argv[], char **buf); extern int traceprobe_update_arg(struct probe_arg *arg); extern void traceprobe_free_probe_arg(struct probe_arg *arg); -- 2.31.1