From nobody Sat Apr 4 03:12:53 2026 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B26E43A6EE7 for ; Fri, 3 Apr 2026 12:44:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775220295; cv=none; b=G0kl+LVCUZ8lI8K9R3btXvRhGBwL/nsONkludDPUZRWhhbTE6qtvay1dca4v7NlAsNC3hK60PpDSlCogociA4rbpuNOl7eAhJDPICRBd6T0kSBc462clTkuJDm1F1RXZskrlPHrah0CX4NV+I18rj1Z6b9uklE2yP7yOmHZ+tes= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775220295; c=relaxed/simple; bh=+IB9jGf96wtUN84hD4VlbxFL50yw4CpCunL/Ed+wI8M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qFcozykACYg+RFrezobdiXeHuHz6rRrG5LDw+oYIJwYAxZn4Mj3OGGffV7B81hfMJNWEkraIVLsvzyRN1w7crl/R0rO4/LRYlb7wwJ3FPqGdWhr0WL+Za//3QrPjKXX8Cbr93/bdocOMBzFufKiOydee4jgDBtlXn2FFJkBnAkY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=otDBfl0i; arc=none smtp.client-ip=209.85.216.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="otDBfl0i" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-358e3cc5e7eso969611a91.0 for ; Fri, 03 Apr 2026 05:44:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775220292; x=1775825092; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=W1P/38vtQcdL49WePaJUfbCTK7MDyAg1D/z13BMMaG8=; b=otDBfl0ipz/OAhkKkciuOBe1rZcTtiRrQG08g+YVda5h+9+vyz+pusKJLSZeJ/QwFO bBjqR/IbtaGuuA/cnhJZCMRNaIXtwNSUXpDisNw+HV2FRLezGY9jC377Ebq78FbEXxEG Qn2BDkgYFqrxBscSNfqbyNLM5Xmh1EO5vkMw28xSl+X149FiTLmCv9jCAUsZhJKyArDU nMViJGGAtBXCmgb41Q/W03SbMxithCrQS+t3NhAIXSQFboDMgLK7SY+xfcMeMcGjh7U4 UpkzJV+gDyBXrsZT73qW4PhGQgLiIxjqXYVfwlWZtMB9Fc/ua1gO11mjShEMdFPyYbIn XT/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775220292; x=1775825092; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=W1P/38vtQcdL49WePaJUfbCTK7MDyAg1D/z13BMMaG8=; b=n030Wm07f+aMH9BUqitXrFq+6iqwgiQMKMqu9dMlbC9pA6XSMXlBUJnie0pnUKr1l5 xxof8sBWoXTx+jJEtR/hrsV5a3/HTAZDYCgGISO04sK6qsH3VXVGdlj2Od4J9x4CT4bx EENrAM2Mn79Ee15BBdl4Eu69PlgiUvIOU2n34MPjh0IdSrPCFKbfZPqr1LNMubj0WA9h frPJwlJSIHbE+svy/NODQf9y23IzwnM6zBmwR3jaX5CI3qOcgulOJ3SgjhjxbMEdajwU AFGe0nYx7O6CfIx/Z25tsS5hIbCoaBUvIbz6o+OZ/FOdd+hg9DFuYI8b1wFG3YVqm+jg lO+g== X-Forwarded-Encrypted: i=1; AJvYcCVM39EnovrGFC45/QmAV1EydfV1BmTgJl5BMFQiz5+amuUQ7UJT2UzjUd4jNNjO58TJNUpQhs9gbJLlte4=@vger.kernel.org X-Gm-Message-State: AOJu0YzPnNSyHqIhD3ttuzo7ZG+JU2PrZvNhV17O9kCEHCLDbMjCYZhN 0RSqyqbZLRN3ugGLWGsKUiuMp/sreEflMHSDcEz5kpVQabcj9gdj5xpU X-Gm-Gg: AeBDiesUBECQ2pINPmjqIp46dnBkBLUXDiePCeW/YGX9vi4DZde6XKjG8IZGDO9WA10 8EsBdE47IBHiXlLy0Wgd/aSQuc0IF7dpPRzx7NTXSdmpH0bQubVO+Au6dz+wGB6gNFMuEc+sgwX tPZqmUI/3HA5eO+3IubJ/1OauXJLfY4g7e4SYPtc0YZ0XX1wzNv/2Bis0sg5plpbZmsABZD3pCD qvr3HjfHSiQLjax0je0zNR5e2qZANTU89UNvP+5tOd7XeUfj04KfaRRg8fzAGA0YmXrXqjSdp/3 rlAXQ26Cftd2OzByEpJChDlUPLprtvwMRa2LsSo7Yh43KZ0r2aEGISOKG45c/vGjdKnswh0lh7h om6qKlyxoqiLSYH2MYC9J2oZ2aGUbRIYCtn8cJbx1jUQpm/fIGb4S+SiIXvalMcJVBC50Eklw3n h9wquMEhLrb8WtUGN0Jfdzm3FQL6zV9RfQ3d1y19A0zFRvOmcAIDd5Xb7+3KWa2IPV52irPmoIW 5Rax8w= X-Received: by 2002:a17:90b:3c0c:b0:35b:9d97:63ac with SMTP id 98e67ed59e1d1-35de684cf9dmr2339910a91.7.1775220291774; Fri, 03 Apr 2026 05:44:51 -0700 (PDT) Received: from computer.goose-salary.ts.net ([2a09:bac5:40b2:1a96::2a6:1f]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35dd35f52c8sm5463525a91.5.2026.04.03.05.44.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2026 05:44:51 -0700 (PDT) From: Varun R Mallya To: bpf@vger.kernel.org, jolsa@kernel.org, leon.hwang@linux.dev, andrii@kernel.org, alan.maguire@oracle.com Cc: ast@kernel.org, eddyz87@gmail.com, martin.lau@linux.dev, daniel@iogearbox.net, linux-kernel@vger.kernel.org, memxor@gmail.com, song@kernel.org, menglong8.dong@gmail.com, varunrmallya@gmail.com Subject: [RFC PATCH bpf-next v3 2/3] libbpf: Add FEAT_KPROBE_MULTI_LINK feature probe. Date: Fri, 3 Apr 2026 18:14:11 +0530 Message-ID: <20260403124412.37449-3-varunrmallya@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260403124412.37449-1-varunrmallya@gmail.com> References: <20260403124412.37449-1-varunrmallya@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add FEAT_KPROBE_MULTI_LINK, similar to UPROBE_MULTI_LINK by loading and creating a link for a small BPF program with BPF_TRACE_KPROBE_MULTI as the expected attach type, and then checking the success of the operation. Signed-off-by: Varun R Mallya --- tools/lib/bpf/features.c | 38 +++++++++++++++++++++++++++++++++ tools/lib/bpf/libbpf_internal.h | 2 ++ 2 files changed, 40 insertions(+) diff --git a/tools/lib/bpf/features.c b/tools/lib/bpf/features.c index 4f19a0d79b0c..01ded8a1e3c4 100644 --- a/tools/lib/bpf/features.c +++ b/tools/lib/bpf/features.c @@ -424,6 +424,41 @@ static int probe_uprobe_multi_link(int token_fd) return link_fd < 0 && err =3D=3D -EINVAL; } =20 +static int probe_kprobe_multi_link(int token_fd) +{ + LIBBPF_OPTS(bpf_prog_load_opts, load_opts, + .expected_attach_type =3D BPF_TRACE_KPROBE_MULTI, + .token_fd =3D token_fd, + .prog_flags =3D token_fd ? BPF_F_TOKEN_FD : 0, + ); + LIBBPF_OPTS(bpf_link_create_opts, link_opts); + struct bpf_insn insns[] =3D { + BPF_MOV64_IMM(BPF_REG_0, 0), + BPF_EXIT_INSN(), + }; + int prog_fd, link_fd, err; + const char *sym =3D "bpf_map_lookup_elem"; /* stable, always present */ + + prog_fd =3D bpf_prog_load(BPF_PROG_TYPE_KPROBE, NULL, "GPL", + insns, ARRAY_SIZE(insns), &load_opts); + if (prog_fd < 0) + return -errno; + + /* attaching to a valid symbol should succeed */ + link_opts.kprobe_multi.syms =3D &sym; + /* MAX_KPROBE_MULTI_CNT is defined as (1U << 20) in kernel/trace/bpf_trac= e.c, + * so we create one more than the allowed limit to make it fail with E2BI= G. + */ + link_opts.kprobe_multi.cnt =3D (1U << 20) + 1; + link_fd =3D bpf_link_create(prog_fd, -1, BPF_TRACE_KPROBE_MULTI, &link_op= ts); + err =3D -errno; + if (link_fd >=3D 0) + close(link_fd); + close(prog_fd); + /* Fails with E2BIG on kernels where kprobe_multi is supported */ + return link_fd <=3D 0 && err =3D=3D -E2BIG; +} + static int probe_kern_bpf_cookie(int token_fd) { struct bpf_insn insns[] =3D { @@ -699,6 +734,9 @@ static struct kern_feature_desc { [FEAT_BTF_LAYOUT] =3D { "kernel supports BTF layout", probe_kern_btf_layout, }, + [FEAT_KPROBE_MULTI_LINK] =3D { + "BPF multi-kprobe link support", probe_kprobe_multi_link, + }, }; =20 bool feat_supported(struct kern_feature_cache *cache, enum kern_feature_id= feat_id) diff --git a/tools/lib/bpf/libbpf_internal.h b/tools/lib/bpf/libbpf_interna= l.h index cabdaef79098..b3cb216aadae 100644 --- a/tools/lib/bpf/libbpf_internal.h +++ b/tools/lib/bpf/libbpf_internal.h @@ -398,6 +398,8 @@ enum kern_feature_id { FEAT_UPROBE_SYSCALL, /* Kernel supports BTF layout information */ FEAT_BTF_LAYOUT, + /* BPF multi-kprobe link support */ + FEAT_KPROBE_MULTI_LINK, __FEAT_CNT, }; =20 --=20 2.53.0