From patchwork Wed Feb 12 15:39:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Chen X-Patchwork-Id: 13971952 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 337FB212FB2; Wed, 12 Feb 2025 15:39:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739374761; cv=none; b=j7bVzXlN0Dv12J50afqncFOzmzvq7Wn7WycLVGCu0J1ywjqIMYk5Jvic0YlGKwF8y3p0AZ1w2k+TCa4IpZXNbKUhhmzsDBJ3hWQpLw9BnM9ychDTZkzAwHPPJRCf42q0k5vVo/gEHLzm2zdXTjTG2OAfYz7sEi1c65A636o7eRU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739374761; c=relaxed/simple; bh=gLL6cpzIFJVIxqPRHnNpi8sbyg8IQoOBomtsQRhVUVU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=Nvhui5jcr8+j4oqgRkXERA0raWDkw6alLoHsmaVV5SJL3hca7/43uuPaafSvkyGitS7bcaPlHk5PSlC6FD6k+LVZvBIvs4N860NSIHjMwoR/IjbLESkt9m3lKjMCQsVbAPUES7MyRkhoOCBRt+/plaVp3HHbumLgiqGar6wc/B8= 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=W1nSDy9k; arc=none smtp.client-ip=209.85.214.182 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="W1nSDy9k" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-21f5660c2fdso105376845ad.2; Wed, 12 Feb 2025 07:39:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739374759; x=1739979559; 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=Jomb4wbCL0aIqDd/8vp4O87PbPEncfEiumc5w8RJl5s=; b=W1nSDy9kx8Q/klgW1I5xvHm8EluXnufBO7bxeHV9QHxiTqAIxzchxFr1Gl9Dt4iOtK 9IlxBje7o5PfOhVaYBO/ZP2s66DsbyXuuM8Mc7w48ABMa3aGTr61bd+R+naDmW9eVfg9 vV0QwQAl7ZV+nzKtuZ+LVk8js6j6jA2j8+xSLroHGe8Ot0ewjMpmfn/ALbaAcA21Mx8N K5bWm1UEkOa/yYYyZRvdAL/e6xE92pNX3ZlhbEcrLkZLdLeHQ6DPsDe4fzXrcIURu2u1 Zw2md3J3KJJVOx/jK/uyiSmMd8LiWsRhI/Yl36mLB/b81KohO/wQ36N1yNrgp5g9cBJt uaMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739374759; x=1739979559; 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=Jomb4wbCL0aIqDd/8vp4O87PbPEncfEiumc5w8RJl5s=; b=kSVljdnvyr4ASn8deSkURmLHeelVcmlR69v68o9+bf/2lDlttO9RXzN6XyVSRp7JOt QwSF2J0mRAZMMOD+dp2Bgbv7EdchHK5Ptg5sN0BPftZ/D34V5O0iS1/OCqjaAk9kjaQe od2jnwnLFpvD5A3y0C+ydVdYFe90CXnhcV8EFNEMlKNCtUZg1/zuVrnYEx5/dulf8E/X GkYl6gFzeEqRDaJag0MuJqQtHtefCf1kvAqoHnUNbvjnoKQkZ1IaHFG8VHhaBLUpFOml y7IAtfIaCnlQCK5dApQRiEDTtq3XXJrl/g1D8SZDwbWir7B/lMDFUFpsw/VTPvOW5CLw QpEQ== X-Forwarded-Encrypted: i=1; AJvYcCWCXyN1EBb4rS6eM68co3Zk4qIX5obpg3JmkA30+/BJO04eCebbhfStG8bPJxdAnHZJowpOEwepu7w5gI8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy8XXJOsolfgjvkY2APdnjpErnnbPwC6iByoZrJyUFIuoGYEuVr uxauj7BoyWWHBeE/1u57k15Sun35Nu+J2sdC2mzM2hGWzxye5vqfTGGcdw== X-Gm-Gg: ASbGncvasaUWvqVLb+LzNqt7AM0MAR/NOlSQ3ozunapAygYK61LtJNcpHHduOnk3u3N M1Kd5/Owb5NmxJHZ9m79U8jEvhagLj7EXJu+sPl4CbLmswYHzpkn0Wb/RZnGXLkBJlgLfS9+TSL 0Q5cT8A96MFU7hj4Z5LDJMI/W9eyLJC/EFau4G+9CfRofoZIE9+PvjgvMp7YdhkEM8/l6j20fni adQjC8zl6QnJ+vxb83gggaP1lOqn9kc74aAra+SGcny/4t73JOIweo3oaivlZbXdV7JDIq7V+6Q pjXDWGFzg1CXQ+pX X-Google-Smtp-Source: AGHT+IGllOU4Vl3axyv39hSFAJPVrdBeecrkKfB243Ro1X5bBRglUBSJJug0ldI+VvscGpwVwMBFww== X-Received: by 2002:a05:6a21:78a9:b0:1db:c20f:2c4d with SMTP id adf61e73a8af0-1ee5c72e4e9mr6168010637.2.1739374759368; Wed, 12 Feb 2025 07:39:19 -0800 (PST) Received: from localhost ([111.229.209.227]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73048e20c32sm11599295b3a.170.2025.02.12.07.39.17 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 12 Feb 2025 07:39:19 -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 v7 1/4] libbpf: Extract prog load type check from libbpf_probe_bpf_helper Date: Wed, 12 Feb 2025 23:39:09 +0800 Message-Id: <20250212153912.24116-2-chen.dylane@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250212153912.24116-1-chen.dylane@gmail.com> References: <20250212153912.24116-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}. Cc: Tao Chen Reviewed-by: Jiri Olsa Signed-off-by: Tao Chen --- tools/lib/bpf/libbpf_probes.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c index 9dfbe7750f56..a48a557314f6 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: - return -EOPNOTSUPP; - default: - break; - } + if (!can_probe_prog_type(prog_type)) + return libbpf_err(-EOPNOTSUPP); buf[0] = '\0'; ret = probe_prog_load(prog_type, insns, insn_cnt, buf, sizeof(buf)); From patchwork Wed Feb 12 15:39:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Chen X-Patchwork-Id: 13971953 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 61C9921D5B8; Wed, 12 Feb 2025 15:39:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739374764; cv=none; b=CGdaDlX8k4ihkgNI7mBv4nw4nOtGXXiVA2Kuwb9FuwSiI4yG1Hg1e5Pt8RgEJmC1DVAU+AurqndDvx1JPNi2J+eQFW8RZkjlVAIma0Ny9I5dmLYY6r5bAj9lUdyLHgIqrEmXUUGIe9ctWDhI0DPCcZkq1PARA4BOOm0qLWMMq28= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739374764; c=relaxed/simple; bh=GXHrpcBGYYSxfi1bUkNZ3mqnK2UL/YlYnu1roKqXTXE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=WY79DGKioSBU0K1ADJwabQIkgNbWHqAKbXUMAeu1APCoGEMvDiEvK9zNxyTPt/7kymp1T4NBydMHahRw3ldc81kr/u3BowyfeiuAKfFyi9rjwqzyHLuJnOH1N6/I6IGY6KA3HxsFTjtZtPgp7UNOMC3Xi82BV2a6/okR+7OnDVw= 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=B2taCkdN; arc=none smtp.client-ip=209.85.214.179 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="B2taCkdN" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-21f710c17baso80619885ad.1; Wed, 12 Feb 2025 07:39:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739374763; x=1739979563; 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=oZRBusg5nwul/y+QfaedcB8PtE5Z6y1mNX2a6kofVKs=; b=B2taCkdNv4aRofBb9IHSaeCZ7V+bcNLyFa+SjtrdGSJGJKza2wVIIsF2fCELTAnQoK x4T2dXD27uWFSolPnKVqmWDgx8X0LmKszDnJWyes3/f+zjW3G2awJr77m5srhkLsiIAc TnGsLt+MpAy5dWP7MiqguY5xnASeMG4DL9GVAw4B3VGfxzP/iRm+2iOGs0O4jXVJVNj0 JLSPI4HsxRB/rT5w81LG6SPS1FiLnIc+6b87+zoZG3aOktK1v0aRYwtCbjA7RSBDZk2Y nLjAPGZI36Dsg4ZCnsjc8fY7AIwDbjycKP4kfZ/WYARWUePOE1/FLUpTUh1Ds7YVBCaQ rJXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739374763; x=1739979563; 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=oZRBusg5nwul/y+QfaedcB8PtE5Z6y1mNX2a6kofVKs=; b=WMclJSRiIUYO7+RalIQAugplRQIMIyu1vdXW5Scyaqomn6u0P7R/LaRqQznSdPfc1y 5fT0HsccuAli+QrWQ+auwcGGA36C2qOJG9JOcGoImcb1GTU5gGgIPJlKEZHYkBfF4Zid NnCnQgO5XS0OILpdzTkeJ/oWQq5Pf31Yk7yMSRrlMOtqIy9u//yGDGuMfWuS2adGjU5n KZusXfAO31bsG9jqDhc4+FQsh02utkCNqLvGyteAmWYhs+g5tUR2pUHTpRwbUkq3O3R/ 0HIpxd+6EKqov1IJQfAH89ziV0jVAbkr5sAmeLSP4a1dXIq+xkV9GDj05lUrBaxkgfv+ gw5g== X-Forwarded-Encrypted: i=1; AJvYcCWhDjKbZdvLAT3mNBXOQNY0ed9CYGkrK+mK1TZs+a4eC60Y4IXfSKzXRoKpspF0F6jK3dwN/8J8z12ogGs=@vger.kernel.org X-Gm-Message-State: AOJu0Yy78VV/weRQ+nOQuLLphX3VaK1P5anNZzoIbpuPrd2JwUBt0NBF 19n0TCCaxBIUpiK3zR4bYKAREapz6IIIgztIBxazzcNT+syW8tDv X-Gm-Gg: ASbGnctJva5kdanvtwTxLhqwpRQ1XheGDJ2rVqkoCQsbe+kw5lSnaa6TWs5DoSYFmLz eOdxdwB28dTbVTOtYyAA4H+NxFSUcPjR/nX7rx5E9C45bt3piYi63pWXFLhRuB5cDeET21KPwY6 rkQSiqLgRsyjlbL/Koje1qWj9S+SNEOd77JdGTinaBYAwGRkH8Q91LvxcliFjYy/SY3ZfFqItg+ GJ1yVgmdYzDwhAt+vXXuuEnzSCe209exO8KXf15t0ZPJCHe42Rb16/yKnZ1xFnkXdwfmf+EqCg5 UYkOf3ss/5VgySBZ X-Google-Smtp-Source: AGHT+IGQQygn0sLV7qUUdfQxa0rYU6E4QUz0AHC7+S8ReH/EIl2xHTpDARhV/t0j95W601woZhIhyQ== X-Received: by 2002:a17:903:298c:b0:215:7dbf:f3de with SMTP id d9443c01a7336-220bbb11bc1mr67607785ad.28.1739374762517; Wed, 12 Feb 2025 07:39:22 -0800 (PST) Received: from localhost ([111.229.209.227]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f368da60bsm114756125ad.258.2025.02.12.07.39.21 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 12 Feb 2025 07:39:22 -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 v7 2/4] libbpf: Init fd_array when prog probe load Date: Wed, 12 Feb 2025 23:39:10 +0800 Message-Id: <20250212153912.24116-3-chen.dylane@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250212153912.24116-1-chen.dylane@gmail.com> References: <20250212153912.24116-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. Cc: Tao Chen Reviewed-by: Jiri Olsa Signed-off-by: Tao Chen --- tools/lib/bpf/libbpf_probes.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c index a48a557314f6..de2b1205b436 100644 --- a/tools/lib/bpf/libbpf_probes.c +++ b/tools/lib/bpf/libbpf_probes.c @@ -102,12 +102,13 @@ __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, - char *log_buf, size_t log_buf_sz) + int *fd_array, 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, ); int fd, err, exp_err = 0; const char *exp_msg = NULL; @@ -214,7 +215,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, NULL, 0); return libbpf_err(ret); } @@ -448,7 +449,7 @@ int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helpe return libbpf_err(-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, buf, sizeof(buf)); if (ret < 0) return libbpf_err(ret); From patchwork Wed Feb 12 15:39:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Chen X-Patchwork-Id: 13971954 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (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 50D5824C692; Wed, 12 Feb 2025 15:39:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739374768; cv=none; b=HtajungyU2fxSe/COSnysRiLboaZDAlcLOkG3GAJy8veNU2mQYq+nut7IyhyyIwpFL9XeHGIa4EzuJNxG2zM8qMX0EL8ilmnpQtX2J2yGyHj8cV15h1JIOvDYxlMmj0wnKRXdaalNLsvjzgIN6VBVb5GNM8cSvpfZcl05V/rMuA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739374768; c=relaxed/simple; bh=dQzH36RcNcQy6t6sYQqwsrQ+lpAk9gQ/KLhqW/Ipw2U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=CvC15rY+Gr/T/+9Yhqb9mghzdBVfKetpNtdK26ySPkGCTJxB0ju7lmxXrE/JyM/zemGgmI7rER6YYC3ibr3QddqW1UM4xlnGzNUet/6pnCyWRuSvvjJNaMWIzAtNLxQLc8BTbUqn5mNz4hWtmF/TADkqjpFgyotlJL8wapYo/3k= 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=dAThmvkk; arc=none smtp.client-ip=209.85.214.173 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="dAThmvkk" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-21f6d2642faso113516185ad.1; Wed, 12 Feb 2025 07:39:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739374766; x=1739979566; 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=IEy5dE7OE7YfdILPn08Fz71Ut4QUxuvJtwXqTxUsqKo=; b=dAThmvkkyNsXDdgQhEf8rcHKcnk1vL1BUGekZnIg5rDTvUqdqWQLHGsFlfxcEt7DGO V91dyWI9P5AO/9cmDTdDnjn2xIHT7FHgAaMsfPN3Bh1mJIkNCvni01LX281rHpcMv/0T PJ5FikqFrogD7hi2TMawt1fDUfazet+DYQetkC07pyqWvkJDvgWdb4XSUewF4p/91BZq UbehxncIyN04QA1l6dE7dcfMM3H1fTeOgtm8Ytlm9F4qAo2N/D+Dzd5DJQbNdIylF/9c Fb2E3Wj9ruWfoooCr3I4d/t3zwcPfLkFNEuJtzOzHGkoCu3Bxy5fKQFlHPuDtJM89OVA Q4tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739374766; x=1739979566; 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=IEy5dE7OE7YfdILPn08Fz71Ut4QUxuvJtwXqTxUsqKo=; b=XRDxlgedAxl+Vtb5zlK9d5zS3AMDYEiXfPPCKsO0jltnk0T0QegNnlmC/dxS2EOMvb 8QmSjs5S0Y5AY7lWNSjVZJwkoYr7AzMrs184LruNWeH3kfS9FdQ6ZGjW0MAYN4mvN18J xdnPWPVbzBFFE5b0mjR6mpTuueBwpyXgiO7EQICOUqmX6uvIxKyeIiGxVkMa1sBTt9tK IWmZO+yzH7cWdkevYS2DzqVDth0GAmJYCGQIpnEwaasCLY9Yv76vT6K/Yj1Syrf9oNw2 Uzpn7X3r+RMlNdDqcVnE3n6Y4DLpRKvB7e6CZQ+9+wMv6QbfT+b81EzThaSt/THsvHZA iASg== X-Forwarded-Encrypted: i=1; AJvYcCVij83i8vHiicgL8zdJRHnMjdSYpHOZSRuGekV74Awo+XFp1siNYt6ODdsWYJ9QzNbJXSFTDc4UGHU82dw=@vger.kernel.org X-Gm-Message-State: AOJu0YxI2ytpXTmntygz0oYbUVAzQQpGkIfOEFC9q4BBPXIcZuVz/Biz WKyoUn6TDgzAqGnv/U2IfDwjf60yt77CS50DE4P3Wehnjyc58/MJ X-Gm-Gg: ASbGncu7MThDfJjo93gfEghH4yd7dVcXO6cLRyaH72xInsIhz/QOLMh9BuCy27Gqouw uw7KpUmmpyeLx26EVXOODP65/PyX4Jx3X+RRPeOrYkOlY/mXexrPYR8zOg0ovOWbLtLBu9QY266 aiudhOoynIzcWZTUPLGVK9M0CMGawESuMW7t6lgzTUTVchCgJ349tVPZ7qCezUUvYhGYl9CqIKw /zVc36dhWSk2To0n4iCG4JcG3C2MjCVBscPC2g257rfxO4+t35Tqv31FziVQDZnnS3LgEKs6P7Y GjXEc4tLC6ehat2l X-Google-Smtp-Source: AGHT+IFfXAEQqDmrijYWUgRIZWDOeWCec+WCAvgWHNMxVf8WZpzwcMRU2iSYBbpJRAgnyi5R1CqFnQ== X-Received: by 2002:a05:6a00:807:b0:732:a24:7354 with SMTP id d2e1a72fcca58-7322c37418bmr5314835b3a.4.1739374766381; Wed, 12 Feb 2025 07:39:26 -0800 (PST) Received: from localhost ([111.229.209.227]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-730759e007csm7911882b3a.42.2025.02.12.07.39.25 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 12 Feb 2025 07:39:26 -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 v7 3/4] libbpf: Add libbpf_probe_bpf_kfunc API Date: Wed, 12 Feb 2025 23:39:11 +0800 Message-Id: <20250212153912.24116-4-chen.dylane@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250212153912.24116-1-chen.dylane@gmail.com> References: <20250212153912.24116-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 Reviewed-by: Jiri Olsa 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..c79b4475b956 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 < 0 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 de2b1205b436..74928e26b5b9 100644 --- a/tools/lib/bpf/libbpf_probes.c +++ b/tools/lib/bpf/libbpf_probes.c @@ -431,6 +431,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 libbpf_err(-EOPNOTSUPP); + + if (btf_fd >= 0) + fd_array[1] = btf_fd; + else + /* insn.off = 0, means vmlinux btf */ + insns[0].off = 0; + + buf[0] = '\0'; + ret = probe_prog_load(prog_type, insns, insn_cnt, btf_fd >= 0 ? fd_array : NULL, + buf, sizeof(buf)); + if (ret < 0) + return libbpf_err(ret); + + if (ret > 0) + return 1; /* assume supported */ + + /* If BPF verifier recognizes BPF kfunc but it's not supported for + * given BPF program type, it will emit "calling kernel function + * is not allowed", if the kfunc id is invalid, + * it will emit "kernel btf_id 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 (strstr(buf, "not allowed") || strstr(buf, "not a function") || + strstr(buf, "invalid module BTF fd") || + strstr(buf, "negative offset disallowed")) + return 0; + + return 1; +} + int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helper_id, const void *opts) { From patchwork Wed Feb 12 15:39:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Chen X-Patchwork-Id: 13971955 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 1CCDB250BF1; Wed, 12 Feb 2025 15:39:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739374771; cv=none; b=uvNhCMrvVxm3ori2Vi6GcU3vFPzjOgu2MSvBQ0PQApFMe7y21RC1oJEU/Y0+QH5dvlPf/hT5jlr02gjvWhkL0lBDFrtl9xTSv/IeXZJS5+TB8xxCF+JiwamPlG/i1TXmVgZTQlvaU4TVuacpNrdDuQKeFt0KslxuWXRTxRmTFn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739374771; c=relaxed/simple; bh=YsiNlyiHQ9d6W2tDHYhJHKwP2PsIzM6e+uSXKvMPjI4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=Crv+idxDbFS2G9GCMqtGd4KW9SY0y1Q0dxy2pl4WPMJy/WD9dOJWNvD/qnOD7+bw2nELQcYrMH9k+LOpSgp8I4lGO1ih3Vc6KkG3Xr95mx1MgJXfdrAzHdgx5+i4Ci7T3WcAemPjn5mkvQFJmn3E46aI9jHL+8BotGHAaQ8dozI= 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=NokHx3LO; arc=none smtp.client-ip=209.85.214.179 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="NokHx3LO" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-21f7f03d856so76074625ad.1; Wed, 12 Feb 2025 07:39:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739374769; x=1739979569; 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=j+dEqt7IhqX28nFJ8Lafm8We0lyyX8DlOy63dc5352Q=; b=NokHx3LOdNyItHuN9Ew3hYR4BJS7j179RjkKM1cspeSaDLqJkL5TX2kHo4r7I6Sj0d zXvUXS6JRu31WjmDJ89F2x65KM5D7IBLfKVeyRtRRa6j9AD16wCe/IEw34JmQxukGNo0 GjAHcPYCBGPh3QyehcaIxBl5N++8nwagy1JBh7peZ6wn4T7+/FmcX2nP4nZIHyJ3lbd/ i2Q0/Ww3xqhgmhvwEwejTskEso1Sct+CGYkWAlNh1x0DRZ998BdFAG/XLUxSIQyuJ+nF eI881qgZCg9MwmZc+RL2AWOMGccpoIoDw1Ed3Q6rau7Nxy+nJPkmxeTdl2bASajLGstT y0cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739374769; x=1739979569; 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=j+dEqt7IhqX28nFJ8Lafm8We0lyyX8DlOy63dc5352Q=; b=PFFqUKK8xb8GnM1/8thYSj8ZPR8T5RPLC/IQSTmfYe3SoglctObKjRoifHxO+mu/Tj viUUG3tvHQsBfQib3AzIe5PEHaZjRp+n+fCyUwvFobm/CPHgJLBE5MGR4GtyuiCdOfuI nTdiI+wf8ggZgGvFaikSUAaq4I5FUUV49TmxMxl5f+CeXS38ymSQAElMgUkyN8wK5Jah WW5RZlikviUtTF92U7eBdFTkbIHEUycF6oB69JKeUi35BcDxRYrAfqFjXgVeRs8UZb0f 8EpVaotXXU7rS9FWZu52QP5+Vo0dX38Zv7bNXVBtkkl8Vam2f/vK47Q2Cc/YP/icVTpn y3HA== X-Forwarded-Encrypted: i=1; AJvYcCWHnrUfAiMYy8w2Y6nJCfrmlbFFR90eKZIxM4Rc7IssIdcrs9zkDbM2afil07zkzJ8dK8vbCnJlocGIrMs=@vger.kernel.org X-Gm-Message-State: AOJu0Yyy5JXkxUMxl3yplWU/TfluXbR+5Z0F5LqJT21MJMArXL+2e52w bvIM/RH+2UUiHcxHBFxTAsBvAKNsl2BQ6HCW7ODfRovYg9U76ywn X-Gm-Gg: ASbGncvOakWiGMWXVyQc5SiDiF9OpELIbDTFVQ0eGahnPug30G1NAghKF2Lmr7SPK5G SL1P8quI6jpkzRfS6dUHkWA9mK67fBCbcQTB3BG0RNXrSVg45Zpq67uxgfql5RHSbdtgRDpgv15 EgkbquXfsZBnyIttzmdUE5Yt18kQeeOJZqnPGkRb5evHE7nFe8Lv2hJLtZLTNniZnxlmWWHQgv5 D8NNrkqbMI+m312cSoOPLkBuKO9rduPUMSyKCKRL1xjblEc+cJh05cuiO2hYQ814qclLa6mPrNf +X6xGNO1lxEIm1rP X-Google-Smtp-Source: AGHT+IElq7kXyojR4GC522Tyxzjjv4dQ8RQv2qyhsakoUWW3qm1eodmykMDfQJavWjrVa1PKWFpIMQ== X-Received: by 2002:a05:6a20:9145:b0:1e0:ae58:2945 with SMTP id adf61e73a8af0-1ee5c822982mr7347641637.31.1739374769091; Wed, 12 Feb 2025 07:39:29 -0800 (PST) Received: from localhost ([111.229.209.227]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ad540da6b6dsm7750843a12.39.2025.02.12.07.39.28 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 12 Feb 2025 07:39:28 -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 v7 4/4] selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests Date: Wed, 12 Feb 2025 23:39:12 +0800 Message-Id: <20250212153912.24116-5-chen.dylane@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20250212153912.24116-1-chen.dylane@gmail.com> References: <20250212153912.24116-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 Cc: Tao Chen Reviewed-by: Jiri Olsa Signed-off-by: Tao Chen --- .../selftests/bpf/prog_tests/libbpf_probes.c | 111 ++++++++++++++++++ 1 file changed, 111 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..d8f5475a94ce 100644 --- a/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c +++ b/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c @@ -126,3 +126,114 @@ 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) + return -1; + + fd = bpf_btf_get_fd_by_id(id); + if (fd < 0) { + if (errno == ENOENT) + continue; + return -1; + } + 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) { + close(fd); + return -1; + } + /* find target module BTF */ + if (!strcmp(name, module)) + break; + + close(fd); + } + + return fd; +} + +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_GE(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); +}