From nobody Thu Apr 2 04:22:55 2026 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) (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 13E033815E9 for ; Mon, 30 Mar 2026 11:01:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774868471; cv=none; b=RFciCZhT5gQnsB1LjIQNe3qJpUaoaReGc8AOW1cbzj+YmYRz1BAk3wQDo3runqY8FIxzxIjGYevtJfUqvFItaWZ9jFHhkRj2p2ykzH9HUCplYaZ6Bq91cP0+ssYUlYJRLMsG8Z0VP2SwfL0JFUh2vH9Yhh48kQejE/Y+gUwmkZw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774868471; c=relaxed/simple; bh=ykB6GqSoBDVF8sQ3aMY5L/RsBwNhVVVqpjKX0IM3w4A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kPLJbhfMTecUIAXfAS2SkGOLlLPrNLRx9/5JKc1Dsll42J6HzOgaMQwW2DToTropYbFZeVd+gfLiIaa/9bEDmuEmgY55TIAcNFy3zhsj8QB+MqzCuHxU1nTZ1HIp+xR9FCG8ER6PlZAXcFBqnDrjVg3E+pNDgHpCfMNz8SUKLxs= 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=cmDkcxLe; arc=none smtp.client-ip=209.85.215.178 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="cmDkcxLe" Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-c7358a7a8d1so3005924a12.3 for ; Mon, 30 Mar 2026 04:01:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774868463; x=1775473263; 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=NZsO2ED3NriQaWk6RZB1AOBG85387YAVdW0BG1uStGY=; b=cmDkcxLeZm+7kdfglxqXlANRCSG99/UAucFFMt7tCANxpHEa74+7unJFin1bxXdnEP kzyxDpyLkeI01D54cAsH5bcHL6BDzzsu2WjfYVI+/6Nz1xa3RzetTh3zxqUXmXz0f3QG h5yJTux28odn6L7P5lvHnr5KbwBCdOjCU/oRI904c6KqCvsHfT/cCT1klZprLYLsWp7Z 8DktjT7mMn9c2tRgNXjv79klKLb+P4JxPqCvkd9q4vIXIGvtVNywunY2bQZDnT3t3WnJ FQ1cUh1yClLq0ut70wq7OsapOAHldNNx1Y+2UaRTkExrflIQZSYPRrO48kXa1CvjsB9G gN1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774868463; x=1775473263; 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=NZsO2ED3NriQaWk6RZB1AOBG85387YAVdW0BG1uStGY=; b=JCoi0F/hq7bSOVf3Vz7xGQofqFxXMqosdddvA8W5SiM93/KEyQysgUkTmhir/2jykv 4eOZ6nXkmZm9lHqCnNTppFWfDInL7JoZdNvoWtm5qAChNZGEmAEFR9GGV7MSp7Vbgosw iTHNws1oQ8DyZZZLJ4ugJ3586OZlMGbl1INr/1HRGp7diq4AWE+jxfeY+I1NI0rljjwC sa2AwAtwFkkUhgAjRmoOnf82q1LP6pq0B9hzmcvM6OS32FQylNL6sIWjooFMjfRfFV1V YSMjn2lDqmNX4bgcjK5FKQm6nWU42uw3F7lqX/ZKfUcmi/GcviWNEyVIWV5t6mNWUVB+ IRyg== X-Forwarded-Encrypted: i=1; AJvYcCVy/lbR3RFttG39+SIkZoNcEqbgbJgvrOAy/PSclxA/FvUurWyh4DXnJpPS0akRZNl011FuvpjQVTnwhZE=@vger.kernel.org X-Gm-Message-State: AOJu0YwytX8SqoCbd+lf2ikF5pWS6N6+x5P/VG2xWnJH61mCptg/91FP fZQ7oxGN9Jo+1+nb/Z9ADMYBAKGMdOa5TSC0TM5ACvqOILAcLeDFwBRo X-Gm-Gg: ATEYQzwNKb327SY8H1YxaWuOi/CUT9bbFRc+UPoN94J0B9IhM2/QxdMFagX65M47ccE TOyQ5767PIc0CqNFOJbpd9+7eewYIdI8mFDHSKGoRnnxe12FVZsxQ3mp6uq+ruA4cwiF79WMEjH fzXbR3kH9xzAoeIUWOroc1utMXHNhzxNOtiIAS2H6RNj1UVcDvO+Yt4Dw7nMvMSy1QTiNs+FLGe 92Z1Yyt9QTpnDkBTnJZI9Amvotunfa++hvuXK53XTqz3s8udz/c+i2A4E3g/HQfiNJIFE/07Obn SEt690kb+/dcMmsOqWZmjbchbL911nRnydYy9i+S0qhO9i8EymeEi1Jb01Q6MTr4PHpWXi6ZFpe gXt7oepNkFMCV+bSWZktPzOMWRPzOLv2MwbO0EZUsuBsNzqRcdU0KilCHAgRIm2nIhZ586JHqro lYDLAQWyA4/6O7HCyLqQ9bgHaSHurCUr27J/4XhvCAbR9XW+ifM/TEkAntDP/6JxNsfMLWfij7L Q== X-Received: by 2002:a05:6a20:a10d:b0:39b:c686:630c with SMTP id adf61e73a8af0-39c878bbaf7mr12969034637.22.1774868463171; Mon, 30 Mar 2026 04:01:03 -0700 (PDT) Received: from eris-fedora.iitr.ac.in ([103.37.201.189]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c76917d843esm6806615a12.29.2026.03.30.04.00.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2026 04:01:02 -0700 (PDT) From: Varun R Mallya To: andrii@kernel.org, alan.maguire@oracle.com, yonghong.song@linux.dev, song@kernel.org, bpf@vger.kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, memxor@gmail.com, eddyz87@gmail.com, martin.lau@linux.dev, jolsa@kernel.org, menglong8.dong@gmail.com, puranjay@kernel.org, bjorn@kernel.org, leon.hwang@linux.dev, varunrmallya@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC PATCH bpf-next v2 2/3] libbpf: Add FEAT_KPROBE_MULTI_LINK feature probe. Date: Mon, 30 Mar 2026 16:30:18 +0530 Message-ID: <20260330110019.549079-3-varunrmallya@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260330110019.549079-1-varunrmallya@gmail.com> References: <20260330110019.549079-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 | 37 +++++++++++++++++++++++++++++++++ tools/lib/bpf/libbpf_internal.h | 2 ++ 2 files changed, 39 insertions(+) diff --git a/tools/lib/bpf/features.c b/tools/lib/bpf/features.c index adcad221c601..13227c9ea69d 100644 --- a/tools/lib/bpf/features.c +++ b/tools/lib/bpf/features.c @@ -424,6 +424,40 @@ 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; + link_opts.kprobe_multi.cnt =3D 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); + /* if kprobe_multi is supported, link creation either succeeds or + * fails with something other than -EINVAL due to permissions, + */ + return link_fd >=3D 0 || (err !=3D -EINVAL); +} + static int probe_kern_bpf_cookie(int token_fd) { struct bpf_insn insns[] =3D { @@ -658,6 +692,9 @@ static struct kern_feature_desc { [FEAT_UPROBE_MULTI_LINK] =3D { "BPF multi-uprobe link support", probe_uprobe_multi_link, }, + [FEAT_KPROBE_MULTI_LINK] =3D { + "BPF multi-kprobe link support", probe_kprobe_multi_link, + }, [FEAT_ARG_CTX_TAG] =3D { "kernel-side __arg_ctx tag", probe_kern_arg_ctx_tag, }, diff --git a/tools/lib/bpf/libbpf_internal.h b/tools/lib/bpf/libbpf_interna= l.h index 4bcb6ca69bb1..633106a687c7 100644 --- a/tools/lib/bpf/libbpf_internal.h +++ b/tools/lib/bpf/libbpf_internal.h @@ -388,6 +388,8 @@ enum kern_feature_id { FEAT_SYSCALL_WRAPPER, /* BPF multi-uprobe link support */ FEAT_UPROBE_MULTI_LINK, + /* BPF multi-kprobe link support */ + FEAT_KPROBE_MULTI_LINK, /* Kernel supports arg:ctx tag (__arg_ctx) for global subprogs natively */ FEAT_ARG_CTX_TAG, /* Kernel supports '?' at the front of datasec names */ --=20 2.52.0