From patchwork Mon Feb 10 05:59:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Chen X-Patchwork-Id: 13967227 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 9D4381A23A0; Mon, 10 Feb 2025 06:00:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739167209; cv=none; b=Icsfnm2XOW7c/Dgl+4hpneteH7jmcsv5hQCF+sNCkGNnB+cjPPrySCrsZbUGmmkJvOgvjbP8rUgd37uvPurtpWfxNQB1ABVf0mFFPw+1fyDiOta+A7oVaiWBFGM2t70jglzwFmKxtIg9IecTkh7z9GyunZViBg0gNSZTrpcfBIQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739167209; c=relaxed/simple; bh=gCSkhghV4FSQv8s+RD3+Va+foCnFjyb66eHvLgkiuWw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=HE0cNu2OYX5k0VQh9sqvlu+RKHCAW3lbMkZ1Nx/7RY2ZFhc2Kovz5ZxYjJFZlrmGlH3JuGyfRkGk3Ssg8uK1uS6VBZjA79J7nM2rnuGipDiI+LkROe0OIFz6XHmNqmT5q2gVgjQD481mJwK2lDn9OKdKOFQ5cghKLvYkTU4LXg0= 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=l1FjVUyA; arc=none smtp.client-ip=209.85.216.49 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="l1FjVUyA" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2f44353649aso5714663a91.0; Sun, 09 Feb 2025 22:00:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739167207; x=1739772007; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=3SRCkrYu/UmXO72yLMKra7PMrlLBZ+7UhvcccuRgDqg=; b=l1FjVUyAC+wpx/vh4VDQL6y6ttKMuKRJX7PUFb74f+I8Yd58s38uacgkipq9rp+V5d TY1pBApEJlwDuu+n9VtNSfj+SPrRoyZtfAmvbZ9aEXh/2TuKFStwC/Xt8f0SYstM/KiB DlvXgNjRaINX5Wvg1EIIdwMezPdioApW3iOeK4H/CnlaEhFu0Duf2u8U7Aln+tCoMxKw +wg3fEBPUilOfMWF0mEHJtSZQFjA95HoOMpOFc2C2AhySVYzk/GQHK07o7heHPCDm5aY qGG2+fN+XtIl89a2+mlJYqyAyIkgIWnUA2n7V0Jqz3kDhBM5jrV5W3J4nSYm5EcSeclP pKeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739167207; x=1739772007; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=3SRCkrYu/UmXO72yLMKra7PMrlLBZ+7UhvcccuRgDqg=; b=tn2GngSi6pxwZqHbkpKOOJ0Jlj9YmP7jbEbeGuXQlMteeGbU7GZHAbFmNmxKg8iN7P 7eKyh7mZy4txM0kYhTrgHifalcIQOKkFqRxt8vLUUSYg/wvj9nEePXdrtKUEtJxCkIsT sd1I81Q9HNNi7FRcjTrzK6m7dOZi+vA3RGILenjkrQWeOucrTT+5LVMekLlbrTrL2iC7 LVuuQZgn4VcxCe6hxkUPZW/GUjVsfpDLAlyFe/JByPSRr4OqhsSGxhvYsVxPFOGrM8ND Ub5ciDfpKP2VrA5pcUPAAK5fcayR1ZMThjVbbF9bJYikEKJUiFpbAmSe3UQ6X0kUlAi4 RkLA== X-Forwarded-Encrypted: i=1; AJvYcCU+ly4rAcJGjGEaFAoPhm6OOl3LkL7lySF2sDFQaYYFJiE0P/ZybxpxUoOjF36CO8a+pHo0DxmK+XV/CtQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/sTx0OEzdWZEo+uaAQBBhJ0oT0VNLGZOqHVr/XX1KhTm4hcHZ ewjkHEIr5xQnGR1UJqcONWywypgVwdmfYx4BbnnYw1aiXZp1kcYxiU72NA== X-Gm-Gg: ASbGncvxvrWepnTKU3i/zxxP3Yw5o7NyUR5L/cDpLjFuvhlruB0LvgdD5J1nXO/8TSr 9ig2GvM5RszERaPlERo50RxBHgnL7iLTmYZWqOMRKVB7pduv2iVv6IousO/zHpnChJ9mSXM/SYw 4721Fm3Bx/TymwIU2+giywWMGF8z3Alzf6hpHyNIInr6TBKGA45XwcIK7sPXu3SM0FBuP3kN+0o aE65a1NqI0WDNCYjfaP8WjgosiOTbyYH91fRSahOE9eGPvkVaN8OJEPb/eF/H46oT5XzIuNIW1K 6TLaC+4FmNQ2TLY8 X-Google-Smtp-Source: AGHT+IGm1C+LWoEbHmeZBzYgASIkwGtwMCLbrkfIOLTl5LkXZuG+yKirlW/CwmcbJx5KeZwueyOO0Q== X-Received: by 2002:a17:90b:4a8c:b0:2ee:6d08:7936 with SMTP id 98e67ed59e1d1-2fa2427538dmr19798095a91.20.1739167206702; Sun, 09 Feb 2025 22:00:06 -0800 (PST) Received: from localhost ([111.229.209.227]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fa22ae7b70sm6053044a91.31.2025.02.09.22.00.05 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Feb 2025 22:00:06 -0800 (PST) From: Tao Chen To: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, haoluo@google.com, jolsa@kernel.org, qmo@kernel.org Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org, chen.dylane@gmail.com Subject: [PATCH bpf-next v5 1/4] libbpf: Extract prog load type check from libbpf_probe_bpf_helper Date: Mon, 10 Feb 2025 13:59:42 +0800 Message-Id: <20250210055945.27192-2-chen.dylane@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250210055945.27192-1-chen.dylane@gmail.com> References: <20250210055945.27192-1-chen.dylane@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: X-Patchwork-Delegate: bpf@iogearbox.net Extract prog load type check part from libbpf_probe_bpf_helper suggested by Andrii, which will be used in both libbpf_probe_bpf_{helper, kfunc}. Signed-off-by: Tao Chen --- tools/lib/bpf/libbpf_probes.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c index 9dfbe7750f56..aeb4fd97d801 100644 --- a/tools/lib/bpf/libbpf_probes.c +++ b/tools/lib/bpf/libbpf_probes.c @@ -413,6 +413,23 @@ int libbpf_probe_bpf_map_type(enum bpf_map_type map_type, const void *opts) return libbpf_err(ret); } +static bool can_probe_prog_type(enum bpf_prog_type prog_type) +{ + /* we can't successfully load all prog types to check for BPF helper + * and kfunc support. + */ + switch (prog_type) { + case BPF_PROG_TYPE_TRACING: + case BPF_PROG_TYPE_EXT: + case BPF_PROG_TYPE_LSM: + case BPF_PROG_TYPE_STRUCT_OPS: + return false; + default: + break; + } + return true; +} + int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helper_id, const void *opts) { @@ -427,18 +444,8 @@ int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helpe if (opts) return libbpf_err(-EINVAL); - /* we can't successfully load all prog types to check for BPF helper - * support, so bail out with -EOPNOTSUPP error - */ - switch (prog_type) { - case BPF_PROG_TYPE_TRACING: - case BPF_PROG_TYPE_EXT: - case BPF_PROG_TYPE_LSM: - case BPF_PROG_TYPE_STRUCT_OPS: + if (!can_probe_prog_type(prog_type)) return -EOPNOTSUPP; - default: - break; - } buf[0] = '\0'; ret = probe_prog_load(prog_type, insns, insn_cnt, buf, sizeof(buf)); From patchwork Mon Feb 10 05:59:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Chen X-Patchwork-Id: 13967228 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 708F61A8F8E; Mon, 10 Feb 2025 06:00:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739167211; cv=none; b=V3b8DZLloG41RS0mjmrOx3ghsK5iRMNXkI6dMTkKaZVldjKwAYgTFOeCq748fRwcxSGQty0TKcn7fJoq0Ui+xcTqB8QnJ4ivzOTcUFaySA8A0vptMRlbS+ZY8Q1ANMdc+s3ysMhzoRgDEb49x44h0Vz73DeCUFupindFDDeEPBw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739167211; c=relaxed/simple; bh=a4ECPYDwfk63dHhyrW+wHnNNRmnBF5bgFkDjFdSmp2Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=EFEF5KsCwmkOa0qNFYSQhI41bfwnvX29I62cKpcfxZpL/kDXEXeKvP5FczJ6196h4QV3CKyv8jimyHMZf4U3dUGEK/0DoqTcCBkGYIO3om8WhN7iBf8lLoyJzCiM488gEWTUDJAsRl6hmR4ms/Fu6FBrxt4nPkPw9pYiY4mG23Y= 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=KFIkO2hO; arc=none smtp.client-ip=209.85.216.50 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="KFIkO2hO" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2fa0f222530so7298451a91.0; Sun, 09 Feb 2025 22:00:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739167210; x=1739772010; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=K/Fl6jr3f6WWgFY+GTM3oxPBToNoP/PIu+n5lwCsix8=; b=KFIkO2hOkqTlCrLq/S4dOOZnGMUrQImc93i336Ead+IAJOPImYmgGvbX7JUVNQ4i01 +0BYhbLNkeWnGhmI7NX0R3y2ex+h7o/hJKxLmuEyd3EARk1yrK0plxCL6B5H/zxlKN2Y r2tiVIaclrUeYD0iI9UC+dVY+7juvIzN+GrM+JpPp4xZ553nJf6u+SVapybvT3OXYzMJ 3FfoWt0YM3cd0yaN61PAuVkEO5+kaPRTDJYzD1Ihv4Jws/3taIqVpBFrT/uvpAzTeveq Cq4Mq1G15mup/xKsjJqhFEMjL/Tk6J7N0VIb/0DEqtQVCn08WKV1XHrRUn53bMfcimQO TBwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739167210; x=1739772010; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=K/Fl6jr3f6WWgFY+GTM3oxPBToNoP/PIu+n5lwCsix8=; b=W9vl3s58DR5XjQr1R5t05lXLn/5eEsmDBEer7/YKMtP1PW6Zp+kA+zPM0ltbcdVYXj 8FCBekRQxM9i6UFODVk3o/njKKpIPix6h43wzbvruhGNjyMp+XC0OBeUJxDZeKSR8wrt xPFtmd/w0W46dpvHxU4a32esDZFbIlb9MHcgsRJyXcXrS8QoVzTwXSFFlZ4aCP+et2og MKNSniIWR94GdEQu2EXNcdsF4jiFK24Ammjr6kTeAXIiUDAyQxCBqH+m9wytDQxI4Aon nRJ/V+rKxwfKvqdLUlFrFh4h2Qvzze5DuHzwJy3NdZR9KjPdaD34ohfWeoiR8ybvl20l wA8Q== X-Forwarded-Encrypted: i=1; AJvYcCVyX+NLqf06y8PrmtHo9LT5FzjAUtAVSM6ctTY/boUVh3yiXIUbzJjifT5EggyPAWXqpjzjhGWRij90W+Q=@vger.kernel.org X-Gm-Message-State: AOJu0YyyQHRu601rvTPowy4dcT6boEFf7EcekCpBEsSlO/K2C/I3he16 JCw8dmDcbZHmfs0LCdFwIG32l2/z1zbr0dpIUB/Ltu6Mj9vrF/mZ X-Gm-Gg: ASbGncuCxdBzNnUUdVQ/gRUQDOS6lwGngWzYMfO6BIDcR3xIjnCa0RX319FS9nOwcg9 jdiFWeyj8TFHHs74L/k8vx8+XLIJzvARJXlHo4gARlcZSCQQMJLwlf/EHka3LyH1drI+XMxNGhR VikFr9jtRfxBYdJOQkCDt+0RwTUFE2TRJx+31CUE8SrjOMGg+XHpfoxL7ARbw7LZ3G964F8/aL3 NZK8RF85HcQfGUwKyJEtzQQHS/KeHTdEz5vDHn7OAgbGScAHo9RlfR+Z9Y9iApszYNNSR9PhHyQ T/s3uNmNi2XkKDkN X-Google-Smtp-Source: AGHT+IHA4z2IgOPPasPSgVPIyJo5HZe1oRWA5x5B52aNFPs0Of2D/sJuZ1ciasAmOyZjy4nTc6TxpA== X-Received: by 2002:a17:90b:510e:b0:2ee:70cb:a500 with SMTP id 98e67ed59e1d1-2fa23f563b2mr17621444a91.1.1739167209573; Sun, 09 Feb 2025 22:00:09 -0800 (PST) Received: from localhost ([111.229.209.227]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fa2716c1ecsm5872099a91.25.2025.02.09.22.00.08 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Feb 2025 22:00:09 -0800 (PST) From: Tao Chen To: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, haoluo@google.com, jolsa@kernel.org, qmo@kernel.org Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org, chen.dylane@gmail.com Subject: [PATCH bpf-next v5 2/4] libbpf: Init fd_array when prog probe load Date: Mon, 10 Feb 2025 13:59:43 +0800 Message-Id: <20250210055945.27192-3-chen.dylane@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250210055945.27192-1-chen.dylane@gmail.com> References: <20250210055945.27192-1-chen.dylane@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: X-Patchwork-Delegate: bpf@iogearbox.net fd_array used to store module btf fd, which will be used for kfunc probe in module btf. Signed-off-by: Tao Chen --- tools/lib/bpf/libbpf_probes.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c index aeb4fd97d801..e142130cb83c 100644 --- a/tools/lib/bpf/libbpf_probes.c +++ b/tools/lib/bpf/libbpf_probes.c @@ -102,12 +102,15 @@ __u32 get_kernel_version(void) static int probe_prog_load(enum bpf_prog_type prog_type, const struct bpf_insn *insns, size_t insns_cnt, + int *fd_array, size_t fd_array_cnt, char *log_buf, size_t log_buf_sz) { LIBBPF_OPTS(bpf_prog_load_opts, opts, .log_buf = log_buf, .log_size = log_buf_sz, .log_level = log_buf ? 1 : 0, + .fd_array = fd_array, + .fd_array_cnt = fd_array_cnt, ); int fd, err, exp_err = 0; const char *exp_msg = NULL; @@ -214,7 +217,7 @@ int libbpf_probe_bpf_prog_type(enum bpf_prog_type prog_type, const void *opts) if (opts) return libbpf_err(-EINVAL); - ret = probe_prog_load(prog_type, insns, insn_cnt, NULL, 0); + ret = probe_prog_load(prog_type, insns, insn_cnt, NULL, 0, NULL, 0); return libbpf_err(ret); } @@ -448,7 +451,7 @@ int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helpe return -EOPNOTSUPP; buf[0] = '\0'; - ret = probe_prog_load(prog_type, insns, insn_cnt, buf, sizeof(buf)); + ret = probe_prog_load(prog_type, insns, insn_cnt, NULL, 0, buf, sizeof(buf)); if (ret < 0) return libbpf_err(ret); From patchwork Mon Feb 10 05:59:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Chen X-Patchwork-Id: 13967229 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (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 B48461B81DC; Mon, 10 Feb 2025 06:00:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739167215; cv=none; b=fnvYzUzIqnpcOYhjzlxemtBNCBcLWLL36o6V9Lv7znEBME4b6IUJgYH90r3zUfDUFWbOp4J6fEYHW06GHZ35amnU2k4IIvSLoOdDu39dBAPWpia6mibzwXD3gzApwv5rd4Q6b1Z2rwU2QYHq46uCnPbIRfLy0kfK5/RoGf736Vc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739167215; c=relaxed/simple; bh=BnFHIyOUO6ntZJJVsVyhlGnrRN02+vZLBazfD1fvsBQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=Kpsi4fF2NTYDp8Uh+foAqB0kZf2V1qyaLZ0zB0POWaIeLGLqpZH0nJWgs8/yiOJhOOBGuCY4JalM3HmdsOUW7+dJUSCG/JUhBhMbpeDu7LhLyNldgJCdk4WLq9mDZxHdAZRaVTOymdFO0UaBCK88NYFPhtLqi6pQ3goJIdyja1k= 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=BoWyCVjp; arc=none smtp.client-ip=209.85.216.54 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="BoWyCVjp" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-2fa286ea7e8so3680499a91.2; Sun, 09 Feb 2025 22:00:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739167213; x=1739772013; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=vAZG7mXz0xoGUnsfB//6r6I5IhNsMCU9G3zuMwRgHzE=; b=BoWyCVjpTcx9KW0CMHhD2s7Mikb9/CuZvfM54NoxzXdrUSU3I8cGLjzsMeFK+kG9/G 5AIWOS0YAfx7I8yPauteOsBpRae/PwYqODI7MVZJ9O56UQFkKKWXj8CXMX8aVQoljMRF YZxtmk3rffphBfCmuSQNn4lm/Spnw8OPRHroEje34cSHnUPPckFa5g4QmfYEXOYbxvcc +SXSZ0Ctwm3KJQLCEc+acbbV4MRJ3Sx0o3z8l3F+/f0XGTOZNJzbc7VO8sTeEJgbyMhc FxOWdnGTFJuSGGn0ibpucmRV7VMsMuRge607i8D/bk1x01ZQEzBdJtye6TeRH7vGtEKO Do7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739167213; x=1739772013; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vAZG7mXz0xoGUnsfB//6r6I5IhNsMCU9G3zuMwRgHzE=; b=QlHpDYHHfrpDH2cOZnORwG/LF3bCqFGeCex0jrefeGz57F921JB/rpGO0b9/5+3eDi X+5mbwQSkdCYCJL8t+fkBJ66N8PllZmLVUxUCaKt04ntYO6InmLDLN3OI3oX9zqhCX/z dVE/AvFqYoCdgca/7HVdcHTolhsO3mAZ8EUCLn74+HNbFp6LK+T12EZUG6kPbZxsmL9w djc9XGMwplSP+vGQTZ/+nLwsSa1iNXj/S51lvxMaK1ClFPfFqVOymEYeFAhSAj7gahpO TVTaVZJUYW8zdjWNoc6ryyqvzuSmOtxcnx6dR2niZJN2LgjpsZduJcGifJvv4T0gwpwI 2sKw== X-Forwarded-Encrypted: i=1; AJvYcCUdF0Ff2p+bD3w3wq/YfsmrVZ1ElimXC2KkwVSLEoRs8RPYrdi1BFxp0+4m7Y4ny8iD5rkL+Oqo4nL2qEs=@vger.kernel.org X-Gm-Message-State: AOJu0Yzohx4/BgCSgcoqRw7TKD77y09WnE2bO0+gYRrLTDstznraDvBt QWun9GQbzj9FmL3IMeb3HGIkhd7NTbNez02mNac2w0IXx7emzvKm X-Gm-Gg: ASbGncsjSIs0ORnIE4PzoguCvGMJ/bU6CjTtzX1LNgkMz7c8409X5re2/C7OrQz6YTQ Qh6TWs96zj0byb2LFs7T80iDDC3p9iX3viQ/bEobddIOXz7j1wwdAzG0/NaQjzo4ByeC2oSNGp1 rsVK5y7Jgq0zXfjiVgDLlnRCXVEQM93LD/VvH1zdwvS3VlUa4HaTk8qi+J4IV2so9m3yFV2+JXF L0P2mD5jtFJZyMYa0JxY86LKNek2fXTHd90nsOJu5NepvGUM4DdyKRfWEQ7Rm7ZHfj5Q3hFewav 0Qcs95THkBVKQows X-Google-Smtp-Source: AGHT+IEalNiKGA95O3F2bAWtCkK3zLSHDLpfbnPffg/s/JOowSzujHWcEhK7xshUSvjDkrESRihliA== X-Received: by 2002:a05:6a00:815:b0:71e:21:d2d8 with SMTP id d2e1a72fcca58-7305d4508d6mr19266129b3a.7.1739167212690; Sun, 09 Feb 2025 22:00:12 -0800 (PST) Received: from localhost ([111.229.209.227]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-730789aee96sm3209182b3a.96.2025.02.09.22.00.11 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Feb 2025 22:00:12 -0800 (PST) From: Tao Chen To: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, haoluo@google.com, jolsa@kernel.org, qmo@kernel.org Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org, chen.dylane@gmail.com, Tao Chen Subject: [PATCH bpf-next v5 3/4] libbpf: Add libbpf_probe_bpf_kfunc API Date: Mon, 10 Feb 2025 13:59:44 +0800 Message-Id: <20250210055945.27192-4-chen.dylane@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250210055945.27192-1-chen.dylane@gmail.com> References: <20250210055945.27192-1-chen.dylane@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: X-Patchwork-Delegate: bpf@iogearbox.net Similarly to libbpf_probe_bpf_helper, the libbpf_probe_bpf_kfunc used to test the availability of the different eBPF kfuncs on the current system. Cc: Tao Chen Signed-off-by: Tao Chen --- tools/lib/bpf/libbpf.h | 19 +++++++++++++- tools/lib/bpf/libbpf.map | 1 + tools/lib/bpf/libbpf_probes.c | 48 +++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 3020ee45303a..e796e38cf255 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -1680,7 +1680,24 @@ LIBBPF_API int libbpf_probe_bpf_map_type(enum bpf_map_type map_type, const void */ LIBBPF_API int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helper_id, const void *opts); - +/** + * @brief **libbpf_probe_bpf_kfunc()** detects if host kernel supports the + * use of a given BPF kfunc from specified BPF program type. + * @param prog_type BPF program type used to check the support of BPF kfunc + * @param kfunc_id The btf ID of BPF kfunc to check support for + * @param btf_fd The module BTF FD, if kfunc is defined in kernel module, + * btf_fd is used to point to module's BTF, which is >= 0, and -1 means kfunc + * defined in vmlinux. + * @param opts reserved for future extensibility, should be NULL + * @return 1, if given combination of program type and kfunc is supported; 0, + * if the combination is not supported; negative error code if feature + * detection for provided input arguments failed or can't be performed + * + * Make sure the process has required set of CAP_* permissions (or runs as + * root) when performing feature checking. + */ +LIBBPF_API int libbpf_probe_bpf_kfunc(enum bpf_prog_type prog_type, + int kfunc_id, int btf_fd, const void *opts); /** * @brief **libbpf_num_possible_cpus()** is a helper function to get the * number of possible CPUs that the host kernel supports and expects. diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map index b5a838de6f47..3bbfe13aeb6a 100644 --- a/tools/lib/bpf/libbpf.map +++ b/tools/lib/bpf/libbpf.map @@ -438,4 +438,5 @@ LIBBPF_1.6.0 { bpf_linker__new_fd; btf__add_decl_attr; btf__add_type_attr; + libbpf_probe_bpf_kfunc; } LIBBPF_1.5.0; diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c index e142130cb83c..53f1196394bf 100644 --- a/tools/lib/bpf/libbpf_probes.c +++ b/tools/lib/bpf/libbpf_probes.c @@ -433,6 +433,54 @@ static bool can_probe_prog_type(enum bpf_prog_type prog_type) return true; } +int libbpf_probe_bpf_kfunc(enum bpf_prog_type prog_type, int kfunc_id, int btf_fd, + const void *opts) +{ + struct bpf_insn insns[] = { + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, BPF_PSEUDO_KFUNC_CALL, 1, kfunc_id), + BPF_EXIT_INSN(), + }; + const size_t insn_cnt = ARRAY_SIZE(insns); + char buf[4096]; + int fd_array[2] = {-1}; + int ret; + + if (opts) + return libbpf_err(-EINVAL); + + if (!can_probe_prog_type(prog_type)) + return -EOPNOTSUPP; + + if (btf_fd >= 0) { + fd_array[1] = btf_fd; + } else if (btf_fd == -1) { + /* insn.off = 0, means vmlinux btf */ + insns[0].off = 0; + } else { + return libbpf_err(-EINVAL); + } + + buf[0] = '\0'; + ret = probe_prog_load(prog_type, insns, insn_cnt, btf_fd >= 0 ? fd_array : NULL, + 0, buf, sizeof(buf)); + if (ret < 0) + return libbpf_err(ret); + + /* If BPF verifier recognizes BPF kfunc but it's not supported for + * given BPF program type, it will emit "calling kernel function + * bpf_cpumask_create is not allowed", if the kfunc id is invalid, + * it will emit "kernel btf_id 4294967295 is not a function". If btf fd + * invalid in module btf, it will emit "invalid module BTF fd specified" or + * "negative offset disallowed for kernel module function call" + */ + if (ret == 0 && (strstr(buf, "not allowed") || strstr(buf, "not a function") || + (strstr(buf, "invalid module BTF fd")) || + (strstr(buf, "negative offset disallowed")))) + return 0; + + return 1; /* assume supported */ +} + int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helper_id, const void *opts) { From patchwork Mon Feb 10 05:59:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Chen X-Patchwork-Id: 13967230 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.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 BB77A1B87E8; Mon, 10 Feb 2025 06:00:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739167220; cv=none; b=bBjcVdY+8uMu/vWX/jfC0QfHNmua+NYnjkst26O9WGMPzxYDuz/ucr61eGbxXfz3Me+IdN2z6Xt6HG0qAyL8gx+X4hsN/31mEOWyXd98Rh8i+OA1qi2HADN9rl1QJ1wCNuZey1XtXS5H0W7NQ5pMC+aFf/wSfqux99MHNM9Tpjc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739167220; c=relaxed/simple; bh=PY6XNUzqc+H9K218+W3EFKgLkxo7/WqXTO5hPAkkWCE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=BVzOclegJJMvk+tFKgAG4F3Il+lGfPIO1VpTILspxcVuBjip3NJbCorj6M27AJMOqGDpozlySmczgtSe/75qmrcI82vF8/2+Wtn1II6iYglWftRAF/EoUevcMW/UIb0AFIsFtOvDrm5iNcS/sQ17MK0MVZwximtQM18vXlbc0hE= 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=Ta+AkYtA; arc=none smtp.client-ip=209.85.216.53 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="Ta+AkYtA" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-2fa1a3c88c5so4729074a91.3; Sun, 09 Feb 2025 22:00:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739167216; x=1739772016; darn=vger.kernel.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=FkJJlpo41q9zCzC63w5CBDZ+n3TrS/5Ia9tIzvwy+5M=; b=Ta+AkYtAut5wPrlZUx8DV9/PEmzocWmhJjwYeGhNoW31sNYnhUzEMSOZaRwNMaOqOE f4AGmKCALLuVlTAQXF9D7RL1MpnOFhY3G6Jn12J5eRPt8yn4O35UUJTqklU/gwdnQ3hx umsIEGEePtTWET1+wqOXyHCA50EoKBot9+ZZYrgroaiFUjvgehPZJCUh9b3jbRF0abnT Bv4n6cE1o03pmra83ld6CvYl2xVfUqo/zkULh+4164Lv+0GwLX/LjUHTmV/UrCrOHX7s CIbKcqzPntYd17GX8omqMMMj0rmbZwtGGOW23K07rVbt5M3YIeRAefOtshmYOCkph0zB N65w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739167216; x=1739772016; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FkJJlpo41q9zCzC63w5CBDZ+n3TrS/5Ia9tIzvwy+5M=; b=bgxZYnoJLutFWbKAAGeWb48wuGLVt4cK1zANFeiNGOHUUnlON4236nuXlVR8YvwLV9 rWJAcHxPXGiuoP1HLcGZCzhyq1qpPGLQhLyX3h1ZicRE6X86HD82cLGwKz5nvbbnnAoQ wSkUoUjnjcAiDgnosGKbTkkInjMhgcv4U/zJpWecsNp8rzOjRKM4r+7EdjsmX6pLyoYX AO7/POxEt9fN791vwH0217h3aMgdUw6OaQ6JRVRuozlD4esXhcewGqNwks311AfSoQ/N osAUmVYB47C6rRRuldsEQ/O9qEiOTA7tbBGKJfzFT2NqFfmUpozh5yWWdoTNM0PB47l5 WP4w== X-Forwarded-Encrypted: i=1; AJvYcCUFmGVOUSvAjMMHG6pnlWrfm9YBaramdC9h3nOJyIDmKmlUFwiFZxLBU50y/HjJfJrILJokdWggiYXVq6Y=@vger.kernel.org X-Gm-Message-State: AOJu0YxiDuNCCY92nOcdKSGg6GwhJt15b5uu3zPThR8WzgU6Gk395JQo I9FiNoIIReb8mdo11XRo5Xij9R8us/HLSis8MM4XplLHiwA3hHIa X-Gm-Gg: ASbGncvpoaRC1oC7N5LVz2pb6IOu2KyCO5O6VN8aIx9Mk8DgRdyhpxr/sw/6/4yqaSy 23/3sFb4waN4EUQSTYKLDrnlgcC6O5dACX6OlioipU0yf8X5+HKO8H4Xx9EAS1rywOvUkvl5nVi 4EVw2wb4feBSHJOtPeglbnzhZWPo2309p5l9iqtmWjrXlBC+LiGiPeKFRgAG9T0QBJvWhGXkcJQ JIkH09WALL6zWOn2plkSAWEqOIvXV9YCKH3uh8/PsNbQHezTzmOY0M//OUNziUtRMp+ymillxI2 Gzg6rkmJJwy2Y415 X-Google-Smtp-Source: AGHT+IE4+JZ3fpF1IFnoB1xhve7M6dOh0jjAAB5tGlX04SYfeL+uhvbmMTgrYqMv8QP4BSxxo1WICQ== X-Received: by 2002:a17:90b:3ec1:b0:2fa:20f4:d27f with SMTP id 98e67ed59e1d1-2fa2450d1d0mr17252892a91.32.1739167215949; Sun, 09 Feb 2025 22:00:15 -0800 (PST) Received: from localhost ([111.229.209.227]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fa0f71b6dbsm7382479a91.27.2025.02.09.22.00.14 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Feb 2025 22:00:15 -0800 (PST) From: Tao Chen To: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, haoluo@google.com, jolsa@kernel.org, qmo@kernel.org Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org, chen.dylane@gmail.com Subject: [PATCH bpf-next v5 4/4] selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests Date: Mon, 10 Feb 2025 13:59:45 +0800 Message-Id: <20250210055945.27192-5-chen.dylane@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250210055945.27192-1-chen.dylane@gmail.com> References: <20250210055945.27192-1-chen.dylane@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: X-Patchwork-Delegate: bpf@iogearbox.net Add selftests for prog_kfunc feature probing. ./test_progs -t libbpf_probe_kfuncs #153 libbpf_probe_kfuncs:OK Summary: 1/0 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Tao Chen --- .../selftests/bpf/prog_tests/libbpf_probes.c | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c b/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c index 4ed46ed58a7b..fc4c9dc2cbed 100644 --- a/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c +++ b/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c @@ -126,3 +126,121 @@ void test_libbpf_probe_helpers(void) ASSERT_EQ(res, d->supported, buf); } } + +static int module_btf_fd(char *module) +{ + int fd, err; + __u32 id = 0, len; + struct bpf_btf_info info; + char name[64]; + + while (true) { + err = bpf_btf_get_next_id(id, &id); + if (err && (errno == ENOENT || errno == EPERM)) + return 0; + if (err) { + err = -errno; + return err; + } + fd = bpf_btf_get_fd_by_id(id); + if (fd < 0) { + if (errno == ENOENT) + continue; + err = -errno; + return err; + } + len = sizeof(info); + memset(&info, 0, sizeof(info)); + info.name = ptr_to_u64(name); + info.name_len = sizeof(name); + err = bpf_btf_get_info_by_fd(fd, &info, &len); + if (err) { + err = -errno; + goto err_out; + } + /* find target module btf */ + if (!strcmp(name, module)) + break; + + close(fd); + } + + return fd; +err_out: + close(fd); + return err; +} + +void test_libbpf_probe_kfuncs(void) +{ + int ret, kfunc_id, fd; + char *kfunc = "bpf_cpumask_create"; + struct btf *vmlinux_btf = NULL; + struct btf *module_btf = NULL; + + vmlinux_btf = btf__parse("/sys/kernel/btf/vmlinux", NULL); + if (!ASSERT_OK_PTR(vmlinux_btf, "btf_parse")) + return; + + kfunc_id = btf__find_by_name_kind(vmlinux_btf, kfunc, BTF_KIND_FUNC); + if (!ASSERT_GT(kfunc_id, 0, kfunc)) + goto cleanup; + + /* prog BPF_PROG_TYPE_SYSCALL supports kfunc bpf_cpumask_create */ + ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_SYSCALL, kfunc_id, -1, NULL); + if (!ASSERT_EQ(ret, 1, "kfunc in vmlinux support")) + goto cleanup; + + /* prog BPF_PROG_TYPE_KPROBE does not support kfunc bpf_cpumask_create */ + ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_KPROBE, kfunc_id, -1, NULL); + if (!ASSERT_EQ(ret, 0, "kfunc in vmlinux not suuport")) + goto cleanup; + + ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_KPROBE, -1, -1, NULL); + if (!ASSERT_EQ(ret, 0, "invalid kfunc id:-1")) + goto cleanup; + + ret = libbpf_probe_bpf_kfunc(100000, kfunc_id, -1, NULL); + if (!ASSERT_ERR(ret, "invalid prog type:100000")) + goto cleanup; + + if (!env.has_testmod) + goto cleanup; + + module_btf = btf__load_module_btf("bpf_testmod", vmlinux_btf); + if (!ASSERT_OK_PTR(module_btf, "load module BTF")) + goto cleanup; + + kfunc_id = btf__find_by_name(module_btf, "bpf_kfunc_call_test1"); + if (!ASSERT_GT(kfunc_id, 0, "func not found")) + goto cleanup; + + fd = module_btf_fd("bpf_testmod"); + if (!ASSERT_GT(fd, 0, "module btf fd")) + goto cleanup; + + /* prog BPF_PROG_TYPE_SYSCALL supports kfunc bpf_kfunc_call_test1 in bpf_testmod */ + ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_SYSCALL, kfunc_id, fd, NULL); + if (!ASSERT_EQ(ret, 1, "kfunc in module btf support")) + goto cleanup_fd; + + /* prog BPF_PROG_TYPE_KPROBE does not support kfunc bpf_kfunc_call_test1 + * in bpf_testmod + */ + ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_KPROBE, kfunc_id, fd, NULL); + if (!ASSERT_EQ(ret, 0, "kfunc in module btf not support")) + goto cleanup_fd; + + ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_SYSCALL, -1, fd, NULL); + if (!ASSERT_EQ(ret, 0, "invalid kfunc id in module btf")) + goto cleanup_fd; + + ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_SYSCALL, kfunc_id, 100, NULL); + ASSERT_EQ(ret, 0, "invalid btf fd in module btf"); + +cleanup_fd: + close(fd); +cleanup: + btf__free(vmlinux_btf); + btf__free(module_btf); +}