From nobody Wed Apr 1 10:28:43 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 B02A23659E6 for ; Wed, 1 Apr 2026 07:08:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775027283; cv=none; b=MAI0K4VNPPHequhN79Zm6behwAOP6TNYA1039Mcc0r660tGAN9OiDzUCzmFHIX+NDp6cb9dtRZeF0XL7hiyVyytWUlaO1dPhgQEnwXU2GembMGQB8yGElhUDr0xvfvQwdptzA0Memn31IBAGY4xhxD97hb4knJ8L/4bbF4H87UI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775027283; c=relaxed/simple; bh=kRJsrOOhJwypsGQeh0t77eM4spvDtzgMI09Db6pLmhc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iIYd2T3rD1vRsrR73ML40EbR7qS49lr0FtzY9xYcjQpacpcrAwos4zM+BTr2BeTE4+1x0RELMkVTj0bH2dJwjO23SlcVD+PZLOoeTb7Mo55BaCPXDBhIEsWYHI556sVZVxR9ekkQ5At8HaJFByN6reaevP3BQKcjCtNcU9hWGas= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=EQjH692r; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="EQjH692r" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-488879b2e6aso938455e9.1 for ; Wed, 01 Apr 2026 00:08:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1775027280; x=1775632080; 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=Jq5bYodbB5WenNka0ORppBTIQzpNw7WJ1K+vBmPhvzs=; b=EQjH692rxDyuj82HitC6JMRIM8afQoQVXKNYxJDD6C0Va0sd+pqIPjXjeuD0JoKpHv NzGiDAhiYcSuWtRHaAVnCRM2y28Qag1RBr/GDcTX9e40CIS/LFKkicSU0PylzK3YIZsI 355x+Ea4wjYpXoA/n0QObzpx5X2Zj/czaGqbxEZYacpilHLiQ6A7tk1D5WWJhaOAz8xN BDxWzxQDAv/NUA6bx9da35S/oFIGuJGM1QsS9/NMf405reLbOV6EY+kVtCnjmJ4u8S+1 zgbp5KPEjEC5FYBRS3yLqkofPh7s5kGHhyCKNwPtXN4GvqhZPdFaIgMgxte9RRx3srU2 PfYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775027280; x=1775632080; 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=Jq5bYodbB5WenNka0ORppBTIQzpNw7WJ1K+vBmPhvzs=; b=EBfYG+aaXvuokSc53NaZ2/I2dDu5yNyOMpvBe16bTDOocLxmcP7NPF1V6QUVcpeWrB 3yjtWtU5djIZQ+0SqoCGe1sDZh2FjlyJdHJetIlaqpuo6TmvbdrUyjWmVYGi5T/NVyet uryd4Y6FLsqpNfb2Zg0LsUvkXI4KkSbxVfP72SXO6bnC1vXmicTfU8I4Fa5Nel+bhYWU L92wFecC5iKbSwaga5WRZWIDUyxBeoEfBi8yv381PH0LGLBH+ejTNc8YFzgALKoe4yAd gvZZKxrydXoZQPzxE2zHaR6nnOwIoNqHfmhMdUagUBsEdkX4+HcPZr6a/TkdV853sDDI se7Q== X-Forwarded-Encrypted: i=1; AJvYcCXNCDRAqhvO6y3G5NR8G0NsvAOqAEMgysBbLpZABp6yy82FtIMP5J6ZzWm9d+Q1cEwXZ/iylTURU36rXi8=@vger.kernel.org X-Gm-Message-State: AOJu0YxXuL2FrLDPYz+ZY+p1vnSSj41NWmGtIIWVDG58Az6rHKTab5sm XSXM1KO6dsN9NQ2lfesHdHujI+sROoomSD/8o4Ad/X8DXBIa8ywX9gC8Qtg2IhtVf2k= X-Gm-Gg: ATEYQzzzoaRfhXaYIerFYmLozr5WBDGh5pwkg7DTU1gh5EpZHV9eV7ll94VrM8VqKeM s4VwPUMLdDoLoOBLbraxyE6v+r5h0MW/msZxkwnJjjcl3fkOt6hGsOdmr+ALLxtV5z/dJxCHaY3 15feiSHHhqHcIdeaB4k+fkjv6leWWiAcdcKRGifbe0ZLQkLv3nj3nbuF2BDZsU2qbbZNrgIyGBK bqqMuIdqEMEb1wQUCWjSVQeY71cy7dtcNnrVXF3nWW2krw/n9QyjUylCMMQEM+NbJ3ERymM23PA dCGhOEr1FclSnnFdfU/WqjTKFkuS5v2jPwmnvIcGeg5fde4U8rUQli274+exTEivN8sqW3PJrIp 6jbliPHQSegkKuSUSd+DeMcxLd77Mu526jqO/inZ6m0M0ijG/zQT+2RibKmJ2kJPOBPLPlsvQwo tCc9Ut/v3zWrFST55h7ERdn1k2GReWJ+S6yYLMzDbr//608dSdCDxYNARN X-Received: by 2002:a05:600c:4e4b:b0:485:439b:683f with SMTP id 5b1f17b1804b1-48883595da7mr42337065e9.20.1775027279770; Wed, 01 Apr 2026 00:07:59 -0700 (PDT) Received: from f16.suse.cz ([121.167.230.140]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-56d58a887e3sm15355778e0c.18.2026.04.01.00.07.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Apr 2026 00:07:59 -0700 (PDT) From: Hoyeon Lee To: bpf@vger.kernel.org, Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau Cc: Eduard Zingerman , Kumar Kartikeya Dwivedi , Song Liu , Yonghong Song , Jiri Olsa , Shuah Khan , Feng Yang , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v6 1/3] libbpf: use direct error codes for kprobe/uprobe attach Date: Wed, 1 Apr 2026 16:05:02 +0900 Message-ID: <20260401070738.122709-2-hoyeon.lee@suse.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260401070738.122709-1-hoyeon.lee@suse.com> References: <20260401070738.122709-1-hoyeon.lee@suse.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" perf_event_open_probe() and perf_event_{k,u}probe_open_legacy() helpers are returning negative error codes directly on failure. This commit changes bpf_program__attach_{k,u}probe_opts() to use those return values directly instead of reading -errno again. Signed-off-by: Hoyeon Lee Acked-by: Jiri Olsa --- tools/lib/bpf/libbpf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 9ea41f40dc82..536c19c14d21 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -11835,7 +11835,7 @@ bpf_program__attach_kprobe_opts(const struct bpf_pr= ogram *prog, offset, -1 /* pid */); } if (pfd < 0) { - err =3D -errno; + err =3D pfd; pr_warn("prog '%s': failed to create %s '%s+0x%zx' perf event: %s\n", prog->name, retprobe ? "kretprobe" : "kprobe", func_name, offset, @@ -12825,7 +12825,7 @@ bpf_program__attach_uprobe_opts(const struct bpf_pr= ogram *prog, pid_t pid, binary_path, func_offset, pid); } if (pfd < 0) { - err =3D -errno; + err =3D pfd; pr_warn("prog '%s': failed to create %s '%s:0x%zx' perf event: %s\n", prog->name, retprobe ? "uretprobe" : "uprobe", binary_path, func_offset, --=20 2.52.0 From nobody Wed Apr 1 10:28:43 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 C96A1367F21 for ; Wed, 1 Apr 2026 07:08:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775027292; cv=none; b=Qr4xb6An+IcXdq5ztzVnk1go+JMSedyXWG9dzPhxkv+mI/FBTbnM8zDkZZhwlKmwTNfR0yE959QD8kYPIMFBbz4fIwsf2Wa6ta3yXMeZZubq0GOrdYWbHB66Ixe14kBDWgH8KPXWxPcn4oYpuHt9HWzfzN9LMEHMl8ZskL+FgVs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775027292; c=relaxed/simple; bh=XW6QKLjAIwFHt0ljUA68HIAeEhmiSgn9ZUZsdX5Ug9w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CXkGmHujoKd41WvZba1/s6XVbGT2GJz0l1lA2uuJ4T+X9cR6WEf+h6w62lKlXvfam5F+AD/nLpwRgU/pd5sqMrWecwiPGvK0b1SIq/niBarAJ5AU3zwdm6JWguV57j5rHSkS46KyW8a+YQXA1iREZbT6POqcojx5B4WDseU8PNA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=TMG1EeMA; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="TMG1EeMA" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-483487335c2so69220205e9.2 for ; Wed, 01 Apr 2026 00:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1775027289; x=1775632089; 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=CJQ4d+lVRTubXv0cnafhKoYOY7oXfEJc77p4cwVsmxs=; b=TMG1EeMAXyK3bJfr9Z3iU/BIa6o02boFA8e46eG4ueR2/CkUPlYijCpR+1ZFLt9OHm UjVIWxioEyJC6rykq26OjdbdaUVxPPaOLAO6N6VspkXGP7smJm3E+vzPDIGogqaYisQe IQYadTH7UTxyA0VzZk5vVLvUb9Dv2dpTJVLjj0R/u1FHzp+hnP5/Qn+jD3jhtVK4nYFc Mru9Dz2y6riW/6OqzbftrEbtzVhvYlcHJiuU7x2u13F/M3S+GjMRaPTSuFmzwKDDq1n2 rWFE4pvatuEiHGlwHckNS2r2U+Wn4DuFs5cmjz/Kz+sCwx6kk/6ANb64pthadARHP+Yt UEmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775027289; x=1775632089; 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=CJQ4d+lVRTubXv0cnafhKoYOY7oXfEJc77p4cwVsmxs=; b=rztX95hB5j4TZA8XhY4rN8+oaMGQ/CHGhanOadS22o7HLWa6XK2SoJG6YNXqy0wB5C iz8nKByf6IvfYGaVuuW71aUgdLeLNCNDdtQlCU5IJft4PzGZLx9v4dOSBHliqXiHvSqI M+JsGGzS7K2Bh/MvxnWHnvQdKDd4tvzD7sBSXfbEC/dVTI8qKaNM3bwfaUMTvwpAsSC4 Kz+BI4x/3Ogjg9slBCTUrznxtvav6JBNx4vOCIZiFGgSZ7hDBphHdhbSfhswWUKGh9lx ZUHhsmWTcMnW/c7vavFveGF0TphOEx9Oie11Wxs1HFENZx4cI7Mw0xZviYmbm1soaixr V9zg== X-Forwarded-Encrypted: i=1; AJvYcCVHcNEhYTwVCEH3Lk3qnuv/a12nQ5X5MF8HOMAbQWdjLh3r1LhO+PoCw2O+7D6q8UzWmmkXk71vWcrhtVo=@vger.kernel.org X-Gm-Message-State: AOJu0YxJhQjs4UUa6TPyojehARs1vM93jw3h48sOBMfRy6kid63gs5OS gARN52qklVNEWrRMD5oYc9+O/Mv35JSM62NfDcpGE5wrtbamUa457IBxHlf1cFKAhWg= X-Gm-Gg: ATEYQzz9TC7xvi6JUEUooT3+Uy2m+y6QHEtGTLlI6R2RJ8aJ1/uBmLtMg5v9Of9avQt bPWx7YlPXKnaJNRdZG6P+2cvAiShSwP7Fv7Vjbo3b2fvGkScslc3GppUaoyRXO50e2+sgic5INp uHT5ESpYNLuu804VEiZwR26NyqnmOmVGbt4cBpzybru7lgxRLgdsQj2CZy7Imh4XM//wX1WHhvN CudG/RWvMGmnG3xonuvYDQ4fgSwH4joJ/E+tLG813GSKDwNhfrXYSg3dk4153urs4+ziEkbXSI7 V45HMqsfBMNgBuAzhHeHR8BjTi16bC+c4lG6YRt2eCzBN+NVCv83EP89+7UPT+KtNnXsHOLeqvQ WfeHaOosT4edLXXmMYTzzqXe2pcrCduea9oBhkWkF3sFjcYsOmE2Q8jzD0wQOyYJTi9XHeZwreo zXqecKk8leO6eH2wm1UZ5ITg9xShrt2yrLVwledOgZq/ww3VUoH15AMzKf X-Received: by 2002:a05:600c:3b9c:b0:485:5812:bb9e with SMTP id 5b1f17b1804b1-48883302d32mr42072255e9.0.1775027289027; Wed, 01 Apr 2026 00:08:09 -0700 (PDT) Received: from f16.suse.cz ([121.167.230.140]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-56d58a887e3sm15355778e0c.18.2026.04.01.00.08.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Apr 2026 00:08:07 -0700 (PDT) From: Hoyeon Lee To: bpf@vger.kernel.org, Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau Cc: Eduard Zingerman , Kumar Kartikeya Dwivedi , Song Liu , Yonghong Song , Jiri Olsa , Shuah Khan , Feng Yang , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v6 2/3] libbpf: clarify raw-address single kprobe attach behavior Date: Wed, 1 Apr 2026 16:05:03 +0900 Message-ID: <20260401070738.122709-3-hoyeon.lee@suse.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260401070738.122709-1-hoyeon.lee@suse.com> References: <20260401070738.122709-1-hoyeon.lee@suse.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" bpf_program__attach_kprobe_opts() documents single-kprobe attach through func_name, with an optional offset. For the PMU-based path, func_name =3D NULL with an absolute address in offset already works as well, but that is not described in the API. This commit clarifies this existing non-legacy behavior. For PMU-based attach, callers can use func_name =3D NULL with an absolute address in offset as the raw-address form. For legacy tracefs/debugfs kprobes, reject this form explicitly. Signed-off-by: Hoyeon Lee Acked-by: Jiri Olsa --- tools/lib/bpf/libbpf.c | 14 ++++++++------ tools/lib/bpf/libbpf.h | 27 ++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 536c19c14d21..ebb965230bb4 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -11816,6 +11816,8 @@ bpf_program__attach_kprobe_opts(const struct bpf_pr= ogram *prog, default: return libbpf_err_ptr(-EINVAL); } + if (!func_name && legacy) + return libbpf_err_ptr(-EOPNOTSUPP); =20 if (!legacy) { pfd =3D perf_event_open_probe(false /* uprobe */, retprobe, @@ -11836,20 +11838,20 @@ bpf_program__attach_kprobe_opts(const struct bpf_= program *prog, } if (pfd < 0) { err =3D pfd; - pr_warn("prog '%s': failed to create %s '%s+0x%zx' perf event: %s\n", + pr_warn("prog '%s': failed to create %s '%s%s0x%zx' perf event: %s\n", prog->name, retprobe ? "kretprobe" : "kprobe", - func_name, offset, - errstr(err)); + func_name ?: "", func_name ? "+" : "", + offset, errstr(err)); goto err_out; } link =3D bpf_program__attach_perf_event_opts(prog, pfd, &pe_opts); err =3D libbpf_get_error(link); if (err) { close(pfd); - pr_warn("prog '%s': failed to attach to %s '%s+0x%zx': %s\n", + pr_warn("prog '%s': failed to attach to %s '%s%s0x%zx': %s\n", prog->name, retprobe ? "kretprobe" : "kprobe", - func_name, offset, - errstr(err)); + func_name ?: "", func_name ? "+" : "", + offset, errstr(err)); goto err_clean_legacy; } if (legacy) { diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 0be34852350f..bba4e8464396 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -557,7 +557,7 @@ struct bpf_kprobe_opts { size_t sz; /* custom user-provided value fetchable through bpf_get_attach_cookie() */ __u64 bpf_cookie; - /* function's offset to install kprobe to */ + /* function offset, or raw address if func_name =3D=3D NULL */ size_t offset; /* kprobe is return probe */ bool retprobe; @@ -565,11 +565,36 @@ struct bpf_kprobe_opts { enum probe_attach_mode attach_mode; size_t :0; }; + #define bpf_kprobe_opts__last_field attach_mode =20 +/** + * @brief **bpf_program__attach_kprobe()** attaches a BPF program to a + * kernel function entry or return. + * + * @param prog BPF program to attach + * @param retprobe Attach to function return + * @param func_name Name of the kernel function to attach to + * @return Reference to the newly created BPF link; or NULL is returned on + * error, error code is stored in errno + */ LIBBPF_API struct bpf_link * bpf_program__attach_kprobe(const struct bpf_program *prog, bool retprobe, const char *func_name); + +/** + * @brief **bpf_program__attach_kprobe_opts()** is just like + * bpf_program__attach_kprobe() except with an options struct + * for various configurations. + * + * @param prog BPF program to attach + * @param func_name Name of the kernel function to attach to. If NULL, + * opts->offset is treated as a raw kernel address. Raw-address attach + * is supported with PROBE_ATTACH_MODE_PERF and PROBE_ATTACH_MODE_LINK. + * @param opts Options for altering program attachment + * @return Reference to the newly created BPF link; or NULL is returned on + * error, error code is stored in errno + */ LIBBPF_API struct bpf_link * bpf_program__attach_kprobe_opts(const struct bpf_program *prog, const char *func_name, --=20 2.52.0 From nobody Wed Apr 1 10:28:43 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 D5228367F23 for ; Wed, 1 Apr 2026 07:08:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775027302; cv=none; b=XiQYBahjW9UXJqednvkpKxvOgGyO4sOSiNqyK+fW2aZAPQ2VXaM+Fh+FUKEqSRphOP5fOYML5sPCXa/72YnHVkVimB+MJY4mSi2ZIrM8pcMbFeQO2FO8f2XNQYeyFSuzqSgGr4AND3A1MK36M+d2Wknaqob/i/oikDKLVyKEvsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775027302; c=relaxed/simple; bh=CcYQvslZdIP7G54tjs43uDnqtNjfbS0YKu4qfnTDKDY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TLxU/aC79VSuN09MkHlEGlX6H5kJn62pr6TiGiMuByR27odHxCNpa2PrzoIH+LHsbdrWdKq/zWAVyUwAGYIkr/4KEqjyYpyNzZBLagIFNzIkeeCLa9kmCdqS/ZxJe36g1/KuS0dQ2X2wqYjO8GWz0B7pUPCHmdt+VvE1m9x1570= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=WDhzaJTl; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="WDhzaJTl" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-486fba7ce4cso65458395e9.3 for ; Wed, 01 Apr 2026 00:08:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1775027299; x=1775632099; 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=UDRli6b8x7cS211Z9QsZ2vSa08qxxmWI+BT+EqkhoSk=; b=WDhzaJTlfjZ6J+sVVNGwQGwONu2UtCOth+rQkLGeT56TIOJBGwvaerFhTv2K8HlEyl wv7YOauAFrhMX9AUnnUxrrAeNPbyZvXhNWL1Gfq4EfatTYPM/Stl7B/HTYvhqubb/y+3 DEOEvq7O04EEcPxp3iPG+zU2Lb+c0xeWv4mE71ZRh2cyHMVWw6LITspasvwVUwCA8GxQ JygQODFcz+Sr2rkZml+1UaMkP50hRCEZNj2efcxEPgsIoBqREP3Ci6thLnB1q099oZal 5QvFiWWz06iILrTIDc3DF5qnmAWPIe3reRDOzyg+R6P/Qo137X9zgtf2rmKowLisrdRy Kwyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775027299; x=1775632099; 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=UDRli6b8x7cS211Z9QsZ2vSa08qxxmWI+BT+EqkhoSk=; b=YeLjz8EXdGoxLmoHsgbYWzm3qx3S1HdGz+AJt5xFDxv+/DiD+ShA1XB5Bwak2457kh ESb7Y/BxPJo+w0e8Efjz0cUO/NpCwSNF6foOLydTwr+qVVbqq3u3T/Vn4KDi6rKkoSk9 ZLiDzh4t8qRvP9AEMxjU8rxpIko5p4qofYYytZWjvUPa7hNHknDwSqxodiMw01a9cjIZ rqH7KrzxeloZK2gGFf836+Yq+xwtF418XgPXrEvKt9aKFP5ibKSGMZiyXIWGdF9HTfpT vq/eqnziJRB3fMpKiTD5UpSTaOHnGNuf2c5oTMu3heeZ1C71fiCY2z9OAARBfsp0/YT6 yYCQ== X-Forwarded-Encrypted: i=1; AJvYcCWP2ruarJlm5MWLvAh9ENzcW5DG9uArUEnQXDVoxwly+1l6lDBPC19iOu9/XyHt+ZK+YsOMTMWtLtUauPk=@vger.kernel.org X-Gm-Message-State: AOJu0Ywg3dkLJNlPEhNBdwjO6682DJAeb9XDGaTvpMMDca9obUOHYuuh ztcxTQCaTq3wHjdv0u5kE4d5ksfGPPBrQLx+CTTJUzWSZKPmxYESyz8/4zD/m1Nkadk= X-Gm-Gg: ATEYQzxM5anIXZHe0+yYMt/SCSkEeSKDNhKmpJq9uik2MwNB/zArGrL5FvpSSFYhT4I nswm8C9r5cNfVZV/mOjDM/GTulJJy6hEJ6PaWvgCOt/qMTHlQkFR/auAMGaTIa0A9pFJYXgMG5p 0qZbsBvXKvq7YMwUY08lz290ZjaidJiqK9Kq573x3NihveK4Oz8OTYEUAn/7dYOX75jcd2MgVN3 ipNBO2kS4uO/eQAv8SFuMEoMDk0GtpI8l2XmdPEZfl1EPI9MV7IacXxwKWLVXLknxnSH7P+cAfL nfarDQz/FwjloD0Hrh13QVQnnkBSmaIg+V1+2kMvrmJg2yonlNR6AfSLMVGRx/OAWjG+GzzGpR2 2QP3/6X/rNMAl5fOZa658T6MjLhafZwLFIqMq+MT47RjUrVdcjNEk0y6t/pUE6J69g2dJ6jcX7/ rorFnwaNerSFS3EPSvpNYurvyVQnI36LpeUha0L6rWlp/TdYFiaTR5Qvs9 X-Received: by 2002:a05:600c:1f11:b0:47e:e076:c7a5 with SMTP id 5b1f17b1804b1-4888356dac4mr35676565e9.11.1775027299200; Wed, 01 Apr 2026 00:08:19 -0700 (PDT) Received: from f16.suse.cz ([121.167.230.140]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-56d58a887e3sm15355778e0c.18.2026.04.01.00.08.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Apr 2026 00:08:17 -0700 (PDT) From: Hoyeon Lee To: bpf@vger.kernel.org, Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau Cc: Eduard Zingerman , Kumar Kartikeya Dwivedi , Song Liu , Yonghong Song , Jiri Olsa , Shuah Khan , Feng Yang , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v6 3/3] selftests/bpf: add test for raw-address single kprobe attach Date: Wed, 1 Apr 2026 16:05:04 +0900 Message-ID: <20260401070738.122709-4-hoyeon.lee@suse.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260401070738.122709-1-hoyeon.lee@suse.com> References: <20260401070738.122709-1-hoyeon.lee@suse.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" Currently, attach_probe covers manual single-kprobe attaches by func_name, but not the raw-address form that the PMU-based single-kprobe path can accept. This commit adds PERF and LINK raw-address coverage. It resolves SYS_NANOSLEEP_KPROBE_NAME through kallsyms, passes the absolute address in bpf_kprobe_opts.offset with func_name =3D NULL, and verifies that kprobe and kretprobe are still triggered. It also verifies that LEGACY rejects the same form. Signed-off-by: Hoyeon Lee Acked-by: Jiri Olsa --- .../selftests/bpf/prog_tests/attach_probe.c | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/attach_probe.c b/tools/= testing/selftests/bpf/prog_tests/attach_probe.c index 9e77e5da7097..a41542f4b35d 100644 --- a/tools/testing/selftests/bpf/prog_tests/attach_probe.c +++ b/tools/testing/selftests/bpf/prog_tests/attach_probe.c @@ -123,6 +123,82 @@ static void test_attach_probe_manual(enum probe_attach= _mode attach_mode) test_attach_probe_manual__destroy(skel); } =20 +/* manual attach address-based kprobe/kretprobe testings */ +static void test_attach_kprobe_by_addr(enum probe_attach_mode attach_mode) +{ + LIBBPF_OPTS(bpf_kprobe_opts, kprobe_opts); + struct test_attach_probe_manual *skel; + unsigned long func_addr; + + if (!ASSERT_OK(load_kallsyms(), "load_kallsyms")) + return; + + func_addr =3D ksym_get_addr(SYS_NANOSLEEP_KPROBE_NAME); + if (!ASSERT_NEQ(func_addr, 0UL, "func_addr")) + return; + + skel =3D test_attach_probe_manual__open_and_load(); + if (!ASSERT_OK_PTR(skel, "skel_kprobe_manual_open_and_load")) + return; + + kprobe_opts.attach_mode =3D attach_mode; + kprobe_opts.retprobe =3D false; + kprobe_opts.offset =3D func_addr; + skel->links.handle_kprobe =3D + bpf_program__attach_kprobe_opts(skel->progs.handle_kprobe, + NULL, &kprobe_opts); + if (!ASSERT_OK_PTR(skel->links.handle_kprobe, "attach_kprobe_by_addr")) + goto cleanup; + + kprobe_opts.retprobe =3D true; + skel->links.handle_kretprobe =3D + bpf_program__attach_kprobe_opts(skel->progs.handle_kretprobe, + NULL, &kprobe_opts); + if (!ASSERT_OK_PTR(skel->links.handle_kretprobe, + "attach_kretprobe_by_addr")) + goto cleanup; + + /* trigger & validate kprobe && kretprobe */ + usleep(1); + + ASSERT_EQ(skel->bss->kprobe_res, 1, "check_kprobe_res"); + ASSERT_EQ(skel->bss->kretprobe_res, 2, "check_kretprobe_res"); + +cleanup: + test_attach_probe_manual__destroy(skel); +} + +/* reject legacy address-based kprobe attach */ +static void test_attach_kprobe_legacy_by_addr_reject(void) +{ + LIBBPF_OPTS(bpf_kprobe_opts, kprobe_opts); + struct test_attach_probe_manual *skel; + unsigned long func_addr; + + if (!ASSERT_OK(load_kallsyms(), "load_kallsyms")) + return; + + func_addr =3D ksym_get_addr(SYS_NANOSLEEP_KPROBE_NAME); + if (!ASSERT_NEQ(func_addr, 0UL, "func_addr")) + return; + + skel =3D test_attach_probe_manual__open_and_load(); + if (!ASSERT_OK_PTR(skel, "skel_kprobe_manual_open_and_load")) + return; + + kprobe_opts.attach_mode =3D PROBE_ATTACH_MODE_LEGACY; + kprobe_opts.offset =3D func_addr; + skel->links.handle_kprobe =3D + bpf_program__attach_kprobe_opts(skel->progs.handle_kprobe, + NULL, &kprobe_opts); + if (ASSERT_ERR_PTR(skel->links.handle_kprobe, + "attach_kprobe_legacy_by_addr")) + ASSERT_EQ(libbpf_get_error(skel->links.handle_kprobe), + -EOPNOTSUPP, "attach_kprobe_legacy_by_addr_err"); + + test_attach_probe_manual__destroy(skel); +} + /* attach uprobe/uretprobe long event name testings */ static void test_attach_uprobe_long_event_name(void) { @@ -416,6 +492,12 @@ void test_attach_probe(void) test_attach_probe_manual(PROBE_ATTACH_MODE_PERF); if (test__start_subtest("manual-link")) test_attach_probe_manual(PROBE_ATTACH_MODE_LINK); + if (test__start_subtest("kprobe-perf-by-addr")) + test_attach_kprobe_by_addr(PROBE_ATTACH_MODE_PERF); + if (test__start_subtest("kprobe-link-by-addr")) + test_attach_kprobe_by_addr(PROBE_ATTACH_MODE_LINK); + if (test__start_subtest("kprobe-legacy-by-addr-reject")) + test_attach_kprobe_legacy_by_addr_reject(); =20 if (test__start_subtest("auto")) test_attach_probe_auto(skel); --=20 2.52.0