lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <fdd4ec9d-39d6-4e24-a736-ac664fb14905@gmail.com>
Date: Thu, 20 Mar 2025 18:36:13 +0000
From: Mykyta Yatsenko <mykyta.yatsenko5@...il.com>
To: Ian Rogers <irogers@...gle.com>, Andrii Nakryiko <andrii@...nel.org>,
 Eduard Zingerman <eddyz87@...il.com>, Alexei Starovoitov <ast@...nel.org>,
 Daniel Borkmann <daniel@...earbox.net>,
 Martin KaFai Lau <martin.lau@...ux.dev>, Song Liu <song@...nel.org>,
 Yonghong Song <yonghong.song@...ux.dev>,
 John Fastabend <john.fastabend@...il.com>, KP Singh <kpsingh@...nel.org>,
 Stanislav Fomichev <sdf@...ichev.me>, Hao Luo <haoluo@...gle.com>,
 Jiri Olsa <jolsa@...nel.org>, Mykyta Yatsenko <yatsenko@...a.com>,
 bpf@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v1] libbpf: Add namespace for errstr making it
 libbpf_errstr

On 20/03/2025 17:59, Ian Rogers wrote:
> When statically linking symbols can be replaced with those from other
> statically linked libraries depending on the link order and the hoped
> for "multiple definition" error may not appear. To avoid conflicts it
> is good practice to namespace symbols, this change renames errstr to
> libbpf_errstr.
>
> Fixes: 1633a83bf993 ("libbpf: Introduce errstr() for stringifying errno")
> Signed-off-by: Ian Rogers <irogers@...gle.com>
> ---
> I feel like this patch shouldn't be strictly necessary, it turned out
> for a use-case it was and people who know better than me say the
> linker is working as intended. The conflicting errstr was from:
> https://sourceforge.net/projects/linuxquota/
> The fixes tag may not be strictly necessary.
> ---
>   tools/lib/bpf/btf.c        |  24 ++--
>   tools/lib/bpf/btf_dump.c   |   2 +-
>   tools/lib/bpf/elf.c        |   2 +-
>   tools/lib/bpf/features.c   |   6 +-
>   tools/lib/bpf/gen_loader.c |   2 +-
>   tools/lib/bpf/libbpf.c     | 228 +++++++++++++++++++------------------
>   tools/lib/bpf/linker.c     |  21 ++--
>   tools/lib/bpf/ringbuf.c    |  21 ++--
>   tools/lib/bpf/str_error.c  |   2 +-
>   tools/lib/bpf/str_error.h  |   4 +-
>   tools/lib/bpf/usdt.c       |  16 +--
>   11 files changed, 168 insertions(+), 160 deletions(-)
>
> diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
> index 38bc6b14b066..b9389ce6a316 100644
> --- a/tools/lib/bpf/btf.c
> +++ b/tools/lib/bpf/btf.c
> @@ -1180,7 +1180,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
>   	fd = open(path, O_RDONLY | O_CLOEXEC);
>   	if (fd < 0) {
>   		err = -errno;
> -		pr_warn("failed to open %s: %s\n", path, errstr(err));
> +		pr_warn("failed to open %s: %s\n", path, libbpf_errstr(err));
>   		return ERR_PTR(err);
>   	}
>   
> @@ -1447,7 +1447,7 @@ int btf_load_into_kernel(struct btf *btf,
>   			goto retry_load;
>   
>   		err = -errno;
> -		pr_warn("BTF loading error: %s\n", errstr(err));
> +		pr_warn("BTF loading error: %s\n", libbpf_errstr(err));
>   		/* don't print out contents of custom log_buf */
>   		if (!log_buf && buf[0])
>   			pr_warn("-- BEGIN BTF LOAD LOG ---\n%s\n-- END BTF LOAD LOG --\n", buf);
> @@ -3517,42 +3517,42 @@ int btf__dedup(struct btf *btf, const struct btf_dedup_opts *opts)
>   
>   	err = btf_dedup_prep(d);
>   	if (err) {
> -		pr_debug("btf_dedup_prep failed: %s\n", errstr(err));
> +		pr_debug("btf_dedup_prep failed: %s\n", libbpf_errstr(err));
>   		goto done;
>   	}
>   	err = btf_dedup_strings(d);
>   	if (err < 0) {
> -		pr_debug("btf_dedup_strings failed: %s\n", errstr(err));
> +		pr_debug("btf_dedup_strings failed: %s\n", libbpf_errstr(err));
>   		goto done;
>   	}
>   	err = btf_dedup_prim_types(d);
>   	if (err < 0) {
> -		pr_debug("btf_dedup_prim_types failed: %s\n", errstr(err));
> +		pr_debug("btf_dedup_prim_types failed: %s\n", libbpf_errstr(err));
>   		goto done;
>   	}
>   	err = btf_dedup_struct_types(d);
>   	if (err < 0) {
> -		pr_debug("btf_dedup_struct_types failed: %s\n", errstr(err));
> +		pr_debug("btf_dedup_struct_types failed: %s\n", libbpf_errstr(err));
>   		goto done;
>   	}
>   	err = btf_dedup_resolve_fwds(d);
>   	if (err < 0) {
> -		pr_debug("btf_dedup_resolve_fwds failed: %s\n", errstr(err));
> +		pr_debug("btf_dedup_resolve_fwds failed: %s\n", libbpf_errstr(err));
>   		goto done;
>   	}
>   	err = btf_dedup_ref_types(d);
>   	if (err < 0) {
> -		pr_debug("btf_dedup_ref_types failed: %s\n", errstr(err));
> +		pr_debug("btf_dedup_ref_types failed: %s\n", libbpf_errstr(err));
>   		goto done;
>   	}
>   	err = btf_dedup_compact_types(d);
>   	if (err < 0) {
> -		pr_debug("btf_dedup_compact_types failed: %s\n", errstr(err));
> +		pr_debug("btf_dedup_compact_types failed: %s\n", libbpf_errstr(err));
>   		goto done;
>   	}
>   	err = btf_dedup_remap_types(d);
>   	if (err < 0) {
> -		pr_debug("btf_dedup_remap_types failed: %s\n", errstr(err));
> +		pr_debug("btf_dedup_remap_types failed: %s\n", libbpf_errstr(err));
>   		goto done;
>   	}
>   
> @@ -5272,7 +5272,7 @@ struct btf *btf__load_vmlinux_btf(void)
>   		if (!btf) {
>   			err = -errno;
>   			pr_warn("failed to read kernel BTF from '%s': %s\n",
> -				sysfs_btf_path, errstr(err));
> +				sysfs_btf_path, libbpf_errstr(err));
>   			return libbpf_err_ptr(err);
>   		}
>   		pr_debug("loaded kernel BTF from '%s'\n", sysfs_btf_path);
> @@ -5289,7 +5289,7 @@ struct btf *btf__load_vmlinux_btf(void)
>   
>   		btf = btf__parse(path, NULL);
>   		err = libbpf_get_error(btf);
> -		pr_debug("loading kernel BTF '%s': %s\n", path, errstr(err));
> +		pr_debug("loading kernel BTF '%s': %s\n", path, libbpf_errstr(err));
>   		if (err)
>   			continue;
>   
> diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c
> index 460c3e57fadb..75c27db7a01c 100644
> --- a/tools/lib/bpf/btf_dump.c
> +++ b/tools/lib/bpf/btf_dump.c
> @@ -1305,7 +1305,7 @@ static void btf_dump_emit_type_decl(struct btf_dump *d, __u32 id,
>   			 * chain, restore stack, emit warning, and try to
>   			 * proceed nevertheless
>   			 */
> -			pr_warn("not enough memory for decl stack: %s\n", errstr(err));
> +			pr_warn("not enough memory for decl stack: %s\n", libbpf_errstr(err));
>   			d->decl_stack_cnt = stack_start;
>   			return;
>   		}
> diff --git a/tools/lib/bpf/elf.c b/tools/lib/bpf/elf.c
> index 823f83ad819c..4294c9f9f572 100644
> --- a/tools/lib/bpf/elf.c
> +++ b/tools/lib/bpf/elf.c
> @@ -37,7 +37,7 @@ int elf_open(const char *binary_path, struct elf_fd *elf_fd)
>   	fd = open(binary_path, O_RDONLY | O_CLOEXEC);
>   	if (fd < 0) {
>   		ret = -errno;
> -		pr_warn("elf: failed to open %s: %s\n", binary_path, errstr(ret));
> +		pr_warn("elf: failed to open %s: %s\n", binary_path, libbpf_errstr(ret));
>   		return ret;
>   	}
>   	elf = elf_begin(fd, ELF_C_READ_MMAP, NULL);
> diff --git a/tools/lib/bpf/features.c b/tools/lib/bpf/features.c
> index 760657f5224c..f47cadf6512a 100644
> --- a/tools/lib/bpf/features.c
> +++ b/tools/lib/bpf/features.c
> @@ -67,7 +67,7 @@ static int probe_kern_global_data(int token_fd)
>   	if (map < 0) {
>   		ret = -errno;
>   		pr_warn("Error in %s(): %s. Couldn't create simple array map.\n",
> -			__func__, errstr(ret));
> +			__func__, libbpf_errstr(ret));
>   		return ret;
>   	}
>   
> @@ -283,7 +283,7 @@ static int probe_prog_bind_map(int token_fd)
>   	if (map < 0) {
>   		ret = -errno;
>   		pr_warn("Error in %s(): %s. Couldn't create simple array map.\n",
> -			__func__, errstr(ret));
> +			__func__, libbpf_errstr(ret));
>   		return ret;
>   	}
>   
> @@ -601,7 +601,7 @@ bool feat_supported(struct kern_feature_cache *cache, enum kern_feature_id feat_
>   			WRITE_ONCE(cache->res[feat_id], FEAT_MISSING);
>   		} else {
>   			pr_warn("Detection of kernel %s support failed: %s\n",
> -				feat->desc, errstr(ret));
> +				feat->desc, libbpf_errstr(ret));
>   			WRITE_ONCE(cache->res[feat_id], FEAT_MISSING);
>   		}
>   	}
> diff --git a/tools/lib/bpf/gen_loader.c b/tools/lib/bpf/gen_loader.c
> index 113ae4abd345..157364527781 100644
> --- a/tools/lib/bpf/gen_loader.c
> +++ b/tools/lib/bpf/gen_loader.c
> @@ -394,7 +394,7 @@ int bpf_gen__finish(struct bpf_gen *gen, int nr_progs, int nr_maps)
>   			      blob_fd_array_off(gen, i));
>   	emit(gen, BPF_MOV64_IMM(BPF_REG_0, 0));
>   	emit(gen, BPF_EXIT_INSN());
> -	pr_debug("gen: finish %s\n", errstr(gen->error));
> +	pr_debug("gen: finish %s\n", libbpf_errstr(gen->error));
>   	if (!gen->error) {
>   		struct gen_loader_opts *opts = gen->opts;
>   
> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> index 6b85060f07b3..c4a9059eab12 100644
> --- a/tools/lib/bpf/libbpf.c
> +++ b/tools/lib/bpf/libbpf.c
> @@ -1558,7 +1558,7 @@ static int bpf_object__elf_init(struct bpf_object *obj)
>   		obj->efile.fd = open(obj->path, O_RDONLY | O_CLOEXEC);
>   		if (obj->efile.fd < 0) {
>   			err = -errno;
> -			pr_warn("elf: failed to open %s: %s\n", obj->path, errstr(err));
> +			pr_warn("elf: failed to open %s: %s\n", obj->path, libbpf_errstr(err));
>   			return err;
>   		}
>   
> @@ -1976,7 +1976,8 @@ bpf_object__init_internal_map(struct bpf_object *obj, enum libbpf_map_type type,
>   	if (map->mmaped == MAP_FAILED) {
>   		err = -errno;
>   		map->mmaped = NULL;
> -		pr_warn("failed to alloc map '%s' content buffer: %s\n", map->name, errstr(err));
> +		pr_warn("failed to alloc map '%s' content buffer: %s\n", map->name,
> +			libbpf_errstr(err));
>   		zfree(&map->real_name);
>   		zfree(&map->name);
>   		return err;
> @@ -2140,7 +2141,7 @@ static int parse_u64(const char *value, __u64 *res)
>   	*res = strtoull(value, &value_end, 0);
>   	if (errno) {
>   		err = -errno;
> -		pr_warn("failed to parse '%s': %s\n", value, errstr(err));
> +		pr_warn("failed to parse '%s': %s\n", value, libbpf_errstr(err));
>   		return err;
>   	}
>   	if (*value_end) {
> @@ -2307,7 +2308,7 @@ static int bpf_object__read_kconfig_file(struct bpf_object *obj, void *data)
>   		err = bpf_object__process_kconfig_line(obj, buf, data);
>   		if (err) {
>   			pr_warn("error parsing system Kconfig line '%s': %s\n",
> -				buf, errstr(err));
> +				buf, libbpf_errstr(err));
>   			goto out;
>   		}
>   	}
> @@ -2327,7 +2328,7 @@ static int bpf_object__read_kconfig_mem(struct bpf_object *obj,
>   	file = fmemopen((void *)config, strlen(config), "r");
>   	if (!file) {
>   		err = -errno;
> -		pr_warn("failed to open in-memory Kconfig: %s\n", errstr(err));
> +		pr_warn("failed to open in-memory Kconfig: %s\n", libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -2335,7 +2336,7 @@ static int bpf_object__read_kconfig_mem(struct bpf_object *obj,
>   		err = bpf_object__process_kconfig_line(obj, buf, data);
>   		if (err) {
>   			pr_warn("error parsing in-memory Kconfig line '%s': %s\n",
> -				buf, errstr(err));
> +				buf, libbpf_errstr(err));
>   			break;
>   		}
>   	}
> @@ -3250,7 +3251,8 @@ static int bpf_object__init_btf(struct bpf_object *obj,
>   		err = libbpf_get_error(obj->btf);
>   		if (err) {
>   			obj->btf = NULL;
> -			pr_warn("Error loading ELF section %s: %s.\n", BTF_ELF_SEC, errstr(err));
> +			pr_warn("Error loading ELF section %s: %s.\n", BTF_ELF_SEC,
> +				libbpf_errstr(err));
>   			goto out;
>   		}
>   		/* enforce 8-byte pointers for BPF-targeted BTFs */
> @@ -3269,7 +3271,7 @@ static int bpf_object__init_btf(struct bpf_object *obj,
>   		err = libbpf_get_error(obj->btf_ext);
>   		if (err) {
>   			pr_warn("Error loading ELF section %s: %s. Ignored and continue.\n",
> -				BTF_EXT_ELF_SEC, errstr(err));
> +				BTF_EXT_ELF_SEC, libbpf_errstr(err));
>   			obj->btf_ext = NULL;
>   			goto out;
>   		}
> @@ -3362,7 +3364,7 @@ static int btf_fixup_datasec(struct bpf_object *obj, struct btf *btf,
>   		err = find_elf_sec_sz(obj, sec_name, &size);
>   		if (err || !size) {
>   			pr_debug("sec '%s': failed to determine size from ELF: size %u, err %s\n",
> -				 sec_name, size, errstr(err));
> +				 sec_name, size, libbpf_errstr(err));
>   			return -ENOENT;
>   		}
>   
> @@ -3516,7 +3518,7 @@ static int bpf_object__load_vmlinux_btf(struct bpf_object *obj, bool force)
>   	obj->btf_vmlinux = btf__load_vmlinux_btf();
>   	err = libbpf_get_error(obj->btf_vmlinux);
>   	if (err) {
> -		pr_warn("Error loading vmlinux BTF: %s\n", errstr(err));
> +		pr_warn("Error loading vmlinux BTF: %s\n", libbpf_errstr(err));
>   		obj->btf_vmlinux = NULL;
>   		return err;
>   	}
> @@ -3621,10 +3623,10 @@ static int bpf_object__sanitize_and_load_btf(struct bpf_object *obj)
>   		btf_mandatory = kernel_needs_btf(obj);
>   		if (btf_mandatory) {
>   			pr_warn("Error loading .BTF into kernel: %s. BTF is mandatory, can't proceed.\n",
> -				errstr(err));
> +				libbpf_errstr(err));
>   		} else {
>   			pr_info("Error loading .BTF into kernel: %s. BTF is optional, ignoring.\n",
> -				errstr(err));
> +				libbpf_errstr(err));
>   			err = 0;
>   		}
>   	}
> @@ -4829,7 +4831,7 @@ static int bpf_get_map_info_from_fdinfo(int fd, struct bpf_map_info *info)
>   	if (!fp) {
>   		err = -errno;
>   		pr_warn("failed to open %s: %s. No procfs support?\n", file,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -4990,7 +4992,7 @@ static int bpf_object_prepare_token(struct bpf_object *obj)
>   	if (bpffs_fd < 0) {
>   		err = -errno;
>   		__pr(level, "object '%s': failed (%s) to open BPF FS mount at '%s'%s\n",
> -		     obj->name, errstr(err), bpffs_path,
> +		     obj->name, libbpf_errstr(err), bpffs_path,
>   		     mandatory ? "" : ", skipping optional step...");
>   		return mandatory ? err : 0;
>   	}
> @@ -5040,7 +5042,7 @@ bpf_object__probe_loading(struct bpf_object *obj)
>   	ret = bump_rlimit_memlock();
>   	if (ret)
>   		pr_warn("Failed to bump RLIMIT_MEMLOCK (err = %s), you might need to do it explicitly!\n",
> -			errstr(ret));
> +			libbpf_errstr(ret));
>   
>   	/* make sure basic loading works */
>   	ret = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, NULL, "GPL", insns, insn_cnt, &opts);
> @@ -5049,7 +5051,7 @@ bpf_object__probe_loading(struct bpf_object *obj)
>   	if (ret < 0) {
>   		ret = errno;
>   		pr_warn("Error in %s(): %s. Couldn't load trivial BPF program. Make sure your kernel supports BPF (CONFIG_BPF_SYSCALL=y) and/or that RLIMIT_MEMLOCK is set to big enough value.\n",
> -			__func__, errstr(ret));
> +			__func__, libbpf_errstr(ret));
>   		return -ret;
>   	}
>   	close(ret);
> @@ -5083,7 +5085,7 @@ static bool map_is_reuse_compat(const struct bpf_map *map, int map_fd)
>   		err = bpf_get_map_info_from_fdinfo(map_fd, &map_info);
>   	if (err) {
>   		pr_warn("failed to get map info for map FD %d: %s\n", map_fd,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		return false;
>   	}
>   
> @@ -5110,7 +5112,7 @@ bpf_object__reuse_map(struct bpf_map *map)
>   		}
>   
>   		pr_warn("couldn't retrieve pinned map '%s': %s\n",
> -			map->pin_path, errstr(err));
> +			map->pin_path, libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -5151,7 +5153,7 @@ bpf_object__populate_internal_map(struct bpf_object *obj, struct bpf_map *map)
>   	if (err) {
>   		err = -errno;
>   		pr_warn("map '%s': failed to set initial contents: %s\n",
> -			bpf_map__name(map), errstr(err));
> +			bpf_map__name(map), libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -5161,7 +5163,7 @@ bpf_object__populate_internal_map(struct bpf_object *obj, struct bpf_map *map)
>   		if (err) {
>   			err = -errno;
>   			pr_warn("map '%s': failed to freeze as read-only: %s\n",
> -				bpf_map__name(map), errstr(err));
> +				bpf_map__name(map), libbpf_errstr(err));
>   			return err;
>   		}
>   	}
> @@ -5188,7 +5190,7 @@ bpf_object__populate_internal_map(struct bpf_object *obj, struct bpf_map *map)
>   		if (mmaped == MAP_FAILED) {
>   			err = -errno;
>   			pr_warn("map '%s': failed to re-mmap() contents: %s\n",
> -				bpf_map__name(map), errstr(err));
> +				bpf_map__name(map), libbpf_errstr(err));
>   			return err;
>   		}
>   		map->mmaped = mmaped;
> @@ -5241,7 +5243,7 @@ static int bpf_object__create_map(struct bpf_object *obj, struct bpf_map *map, b
>   			err = bpf_object__create_map(obj, map->inner_map, true);
>   			if (err) {
>   				pr_warn("map '%s': failed to create inner map: %s\n",
> -					map->name, errstr(err));
> +					map->name, libbpf_errstr(err));
>   				return err;
>   			}
>   			map->inner_map_fd = map->inner_map->fd;
> @@ -5297,7 +5299,7 @@ static int bpf_object__create_map(struct bpf_object *obj, struct bpf_map *map, b
>   	if (map_fd < 0 && (create_attr.btf_key_type_id || create_attr.btf_value_type_id)) {
>   		err = -errno;
>   		pr_warn("Error in bpf_create_map_xattr(%s): %s. Retrying without BTF.\n",
> -			map->name, errstr(err));
> +			map->name, libbpf_errstr(err));
>   		create_attr.btf_fd = 0;
>   		create_attr.btf_key_type_id = 0;
>   		create_attr.btf_value_type_id = 0;
> @@ -5353,7 +5355,7 @@ static int init_map_in_map_slots(struct bpf_object *obj, struct bpf_map *map)
>   		if (err) {
>   			err = -errno;
>   			pr_warn("map '%s': failed to initialize slot [%d] to map '%s' fd=%d: %s\n",
> -				map->name, i, targ_map->name, fd, errstr(err));
> +				map->name, i, targ_map->name, fd, libbpf_errstr(err));
>   			return err;
>   		}
>   		pr_debug("map '%s': slot [%d] set to map '%s' fd=%d\n",
> @@ -5386,7 +5388,7 @@ static int init_prog_array_slots(struct bpf_object *obj, struct bpf_map *map)
>   		if (err) {
>   			err = -errno;
>   			pr_warn("map '%s': failed to initialize slot [%d] to prog '%s' fd=%d: %s\n",
> -				map->name, i, targ_prog->name, fd, errstr(err));
> +				map->name, i, targ_prog->name, fd, libbpf_errstr(err));
>   			return err;
>   		}
>   		pr_debug("map '%s': slot [%d] set to prog '%s' fd=%d\n",
> @@ -5513,7 +5515,7 @@ bpf_object__create_maps(struct bpf_object *obj)
>   					err = -errno;
>   					map->mmaped = NULL;
>   					pr_warn("map '%s': failed to mmap arena: %s\n",
> -						map->name, errstr(err));
> +						map->name, libbpf_errstr(err));
>   					return err;
>   				}
>   				if (obj->arena_data) {
> @@ -5536,7 +5538,7 @@ bpf_object__create_maps(struct bpf_object *obj)
>   					goto retry;
>   				}
>   				pr_warn("map '%s': failed to auto-pin at '%s': %s\n",
> -					map->name, map->pin_path, errstr(err));
> +					map->name, map->pin_path, libbpf_errstr(err));
>   				goto err_out;
>   			}
>   		}
> @@ -5545,7 +5547,7 @@ bpf_object__create_maps(struct bpf_object *obj)
>   	return 0;
>   
>   err_out:
> -	pr_warn("map '%s': failed to create: %s\n", map->name, errstr(err));
> +	pr_warn("map '%s': failed to create: %s\n", map->name, libbpf_errstr(err));
>   	pr_perm_msg(err);
>   	for (j = 0; j < i; j++)
>   		zclose(obj->maps[j].fd);
> @@ -5669,7 +5671,7 @@ static int load_module_btfs(struct bpf_object *obj)
>   		}
>   		if (err) {
>   			err = -errno;
> -			pr_warn("failed to iterate BTF objects: %s\n", errstr(err));
> +			pr_warn("failed to iterate BTF objects: %s\n", libbpf_errstr(err));
>   			return err;
>   		}
>   
> @@ -5678,7 +5680,7 @@ static int load_module_btfs(struct bpf_object *obj)
>   			if (errno == ENOENT)
>   				continue; /* expected race: BTF was unloaded */
>   			err = -errno;
> -			pr_warn("failed to get BTF object #%d FD: %s\n", id, errstr(err));
> +			pr_warn("failed to get BTF object #%d FD: %s\n", id, libbpf_errstr(err));
>   			return err;
>   		}
>   
> @@ -5690,7 +5692,7 @@ static int load_module_btfs(struct bpf_object *obj)
>   		err = bpf_btf_get_info_by_fd(fd, &info, &len);
>   		if (err) {
>   			err = -errno;
> -			pr_warn("failed to get BTF object #%d info: %s\n", id, errstr(err));
> +			pr_warn("failed to get BTF object #%d info: %s\n", id, libbpf_errstr(err));
>   			goto err_out;
>   		}
>   
> @@ -5704,7 +5706,7 @@ static int load_module_btfs(struct bpf_object *obj)
>   		err = libbpf_get_error(btf);
>   		if (err) {
>   			pr_warn("failed to load module [%s]'s BTF object #%d: %s\n",
> -				name, id, errstr(err));
> +				name, id, libbpf_errstr(err));
>   			goto err_out;
>   		}
>   
> @@ -5933,7 +5935,7 @@ bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path)
>   		obj->btf_vmlinux_override = btf__parse(targ_btf_path, NULL);
>   		err = libbpf_get_error(obj->btf_vmlinux_override);
>   		if (err) {
> -			pr_warn("failed to parse target BTF: %s\n", errstr(err));
> +			pr_warn("failed to parse target BTF: %s\n", libbpf_errstr(err));
>   			return err;
>   		}
>   	}
> @@ -5994,7 +5996,7 @@ bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path)
>   			err = record_relo_core(prog, rec, insn_idx);
>   			if (err) {
>   				pr_warn("prog '%s': relo #%d: failed to record relocation: %s\n",
> -					prog->name, i, errstr(err));
> +					prog->name, i, libbpf_errstr(err));
>   				goto out;
>   			}
>   
> @@ -6004,14 +6006,14 @@ bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path)
>   			err = bpf_core_resolve_relo(prog, rec, i, obj->btf, cand_cache, &targ_res);
>   			if (err) {
>   				pr_warn("prog '%s': relo #%d: failed to relocate: %s\n",
> -					prog->name, i, errstr(err));
> +					prog->name, i, libbpf_errstr(err));
>   				goto out;
>   			}
>   
>   			err = bpf_core_patch_insn(prog->name, insn, insn_idx, rec, i, &targ_res);
>   			if (err) {
>   				pr_warn("prog '%s': relo #%d: failed to patch insn #%u: %s\n",
> -					prog->name, i, insn_idx, errstr(err));
> +					prog->name, i, insn_idx, libbpf_errstr(err));
>   				goto out;
>   			}
>   		}
> @@ -6280,7 +6282,7 @@ reloc_prog_func_and_line_info(const struct bpf_object *obj,
>   	if (err) {
>   		if (err != -ENOENT) {
>   			pr_warn("prog '%s': error relocating .BTF.ext function info: %s\n",
> -				prog->name, errstr(err));
> +				prog->name, libbpf_errstr(err));
>   			return err;
>   		}
>   		if (main_prog->func_info) {
> @@ -6308,7 +6310,7 @@ reloc_prog_func_and_line_info(const struct bpf_object *obj,
>   	if (err) {
>   		if (err != -ENOENT) {
>   			pr_warn("prog '%s': error relocating .BTF.ext line info: %s\n",
> -				prog->name, errstr(err));
> +				prog->name, libbpf_errstr(err));
>   			return err;
>   		}
>   		if (main_prog->line_info) {
> @@ -7073,7 +7075,7 @@ static int bpf_object__relocate(struct bpf_object *obj, const char *targ_btf_pat
>   		err = bpf_object__relocate_core(obj, targ_btf_path);
>   		if (err) {
>   			pr_warn("failed to perform CO-RE relocations: %s\n",
> -				errstr(err));
> +				libbpf_errstr(err));
>   			return err;
>   		}
>   		bpf_object__sort_relos(obj);
> @@ -7118,7 +7120,7 @@ static int bpf_object__relocate(struct bpf_object *obj, const char *targ_btf_pat
>   		err = bpf_object__relocate_calls(obj, prog);
>   		if (err) {
>   			pr_warn("prog '%s': failed to relocate calls: %s\n",
> -				prog->name, errstr(err));
> +				prog->name, libbpf_errstr(err));
>   			return err;
>   		}
>   
> @@ -7155,7 +7157,7 @@ static int bpf_object__relocate(struct bpf_object *obj, const char *targ_btf_pat
>   		err = bpf_object__relocate_data(obj, prog);
>   		if (err) {
>   			pr_warn("prog '%s': failed to relocate data references: %s\n",
> -				prog->name, errstr(err));
> +				prog->name, libbpf_errstr(err));
>   			return err;
>   		}
>   
> @@ -7163,7 +7165,7 @@ static int bpf_object__relocate(struct bpf_object *obj, const char *targ_btf_pat
>   		err = bpf_program_fixup_func_info(obj, prog);
>   		if (err) {
>   			pr_warn("prog '%s': failed to perform .BTF.ext fix ups: %s\n",
> -				prog->name, errstr(err));
> +				prog->name, libbpf_errstr(err));
>   			return err;
>   		}
>   	}
> @@ -7536,7 +7538,7 @@ static int bpf_object_load_prog(struct bpf_object *obj, struct bpf_program *prog
>   		err = prog->sec_def->prog_prepare_load_fn(prog, &load_attr, prog->sec_def->cookie);
>   		if (err < 0) {
>   			pr_warn("prog '%s': failed to prepare load attributes: %s\n",
> -				prog->name, errstr(err));
> +				prog->name, libbpf_errstr(err));
>   			return err;
>   		}
>   		insns = prog->insns;
> @@ -7601,7 +7603,7 @@ static int bpf_object_load_prog(struct bpf_object *obj, struct bpf_program *prog
>   
>   				if (bpf_prog_bind_map(ret, map->fd, NULL)) {
>   					pr_warn("prog '%s': failed to bind map '%s': %s\n",
> -						prog->name, map->real_name, errstr(errno));
> +						prog->name, map->real_name, libbpf_errstr(errno));
>   					/* Don't fail hard if can't bind rodata. */
>   				}
>   			}
> @@ -7631,7 +7633,7 @@ static int bpf_object_load_prog(struct bpf_object *obj, struct bpf_program *prog
>   	/* post-process verifier log to improve error descriptions */
>   	fixup_verifier_log(prog, log_buf, log_buf_size);
>   
> -	pr_warn("prog '%s': BPF program load failed: %s\n", prog->name, errstr(errno));
> +	pr_warn("prog '%s': BPF program load failed: %s\n", prog->name, libbpf_errstr(errno));
>   	pr_perm_msg(ret);
>   
>   	if (own_log_buf && log_buf && log_buf[0] != '\0') {
> @@ -7917,7 +7919,7 @@ bpf_object__load_progs(struct bpf_object *obj, int log_level)
>   		err = bpf_object_load_prog(obj, prog, prog->insns, prog->insns_cnt,
>   					   obj->license, obj->kern_version, &prog->fd);
>   		if (err) {
> -			pr_warn("prog '%s': failed to load: %s\n", prog->name, errstr(err));
> +			pr_warn("prog '%s': failed to load: %s\n", prog->name, libbpf_errstr(err));
>   			return err;
>   		}
>   	}
> @@ -7967,7 +7969,7 @@ static int bpf_object_init_progs(struct bpf_object *obj, const struct bpf_object
>   			err = prog->sec_def->prog_setup_fn(prog, prog->sec_def->cookie);
>   			if (err < 0) {
>   				pr_warn("prog '%s': failed to initialize: %s\n",
> -					prog->name, errstr(err));
> +					prog->name, libbpf_errstr(err));
>   				return err;
>   			}
>   		}
> @@ -8156,7 +8158,7 @@ static int libbpf_kallsyms_parse(kallsyms_cb_t cb, void *ctx)
>   	f = fopen("/proc/kallsyms", "re");
>   	if (!f) {
>   		err = -errno;
> -		pr_warn("failed to open /proc/kallsyms: %s\n", errstr(err));
> +		pr_warn("failed to open /proc/kallsyms: %s\n", libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -8697,7 +8699,7 @@ static int make_parent_dir(const char *path)
>   
>   	free(dname);
>   	if (err) {
> -		pr_warn("failed to mkdir %s: %s\n", path, errstr(err));
> +		pr_warn("failed to mkdir %s: %s\n", path, libbpf_errstr(err));
>   	}
>   	return err;
>   }
> @@ -8717,7 +8719,7 @@ static int check_path(const char *path)
>   
>   	dir = dirname(dname);
>   	if (statfs(dir, &st_fs)) {
> -		pr_warn("failed to statfs %s: %s\n", dir, errstr(errno));
> +		pr_warn("failed to statfs %s: %s\n", dir, libbpf_errstr(errno));
>   		err = -errno;
>   	}
>   	free(dname);
> @@ -8749,7 +8751,8 @@ int bpf_program__pin(struct bpf_program *prog, const char *path)
>   
>   	if (bpf_obj_pin(prog->fd, path)) {
>   		err = -errno;
> -		pr_warn("prog '%s': failed to pin at '%s': %s\n", prog->name, path, errstr(err));
> +		pr_warn("prog '%s': failed to pin at '%s': %s\n", prog->name, path,
> +			libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
> @@ -8838,7 +8841,7 @@ int bpf_map__pin(struct bpf_map *map, const char *path)
>   	return 0;
>   
>   out_err:
> -	pr_warn("failed to pin map: %s\n", errstr(err));
> +	pr_warn("failed to pin map: %s\n", libbpf_errstr(err));
>   	return libbpf_err(err);
>   }
>   
> @@ -10035,7 +10038,7 @@ static int libbpf_find_prog_btf_id(const char *name, __u32 attach_prog_fd, int t
>   	err = bpf_prog_get_info_by_fd(attach_prog_fd, &info, &info_len);
>   	if (err) {
>   		pr_warn("failed bpf_prog_get_info_by_fd for FD %d: %s\n",
> -			attach_prog_fd, errstr(err));
> +			attach_prog_fd, libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -10047,7 +10050,8 @@ static int libbpf_find_prog_btf_id(const char *name, __u32 attach_prog_fd, int t
>   	btf = btf_load_from_kernel(info.btf_id, NULL, token_fd);
>   	err = libbpf_get_error(btf);
>   	if (err) {
> -		pr_warn("Failed to get BTF %d of the program: %s\n", info.btf_id, errstr(err));
> +		pr_warn("Failed to get BTF %d of the program: %s\n", info.btf_id,
> +			libbpf_errstr(err));
>   		goto out;
>   	}
>   	err = btf__find_by_name_kind(btf, name, BTF_KIND_FUNC);
> @@ -10130,7 +10134,7 @@ static int libbpf_find_attach_btf_id(struct bpf_program *prog, const char *attac
>   		err = libbpf_find_prog_btf_id(attach_name, attach_prog_fd, prog->obj->token_fd);
>   		if (err < 0) {
>   			pr_warn("prog '%s': failed to find BPF program (FD %d) BTF ID for '%s': %s\n",
> -				prog->name, attach_prog_fd, attach_name, errstr(err));
> +				prog->name, attach_prog_fd, attach_name, libbpf_errstr(err));
>   			return err;
>   		}
>   		*btf_obj_fd = 0;
> @@ -10150,7 +10154,7 @@ static int libbpf_find_attach_btf_id(struct bpf_program *prog, const char *attac
>   	}
>   	if (err) {
>   		pr_warn("prog '%s': failed to find kernel BTF type ID of '%s': %s\n",
> -			prog->name, attach_name, errstr(err));
> +			prog->name, attach_name, libbpf_errstr(err));
>   		return err;
>   	}
>   	return 0;
> @@ -10379,13 +10383,13 @@ int bpf_map__set_value_size(struct bpf_map *map, __u32 size)
>   		err = bpf_map_mmap_resize(map, mmap_old_sz, mmap_new_sz);
>   		if (err) {
>   			pr_warn("map '%s': failed to resize memory-mapped region: %s\n",
> -				bpf_map__name(map), errstr(err));
> +				bpf_map__name(map), libbpf_errstr(err));
>   			return libbpf_err(err);
>   		}
>   		err = map_btf_datasec_resize(map, size);
>   		if (err && err != -ENOENT) {
>   			pr_warn("map '%s': failed to adjust resized BTF, clearing BTF key/value info: %s\n",
> -				bpf_map__name(map), errstr(err));
> +				bpf_map__name(map), libbpf_errstr(err));
>   			map->btf_value_type_id = 0;
>   			map->btf_key_type_id = 0;
>   		}
> @@ -10911,7 +10915,7 @@ struct bpf_link *bpf_program__attach_perf_event_opts(const struct bpf_program *p
>   		if (link_fd < 0) {
>   			err = -errno;
>   			pr_warn("prog '%s': failed to create BPF link for perf_event FD %d: %s\n",
> -				prog->name, pfd, errstr(err));
> +				prog->name, pfd, libbpf_errstr(err));
>   			goto err_out;
>   		}
>   		link->link.fd = link_fd;
> @@ -10925,7 +10929,7 @@ struct bpf_link *bpf_program__attach_perf_event_opts(const struct bpf_program *p
>   		if (ioctl(pfd, PERF_EVENT_IOC_SET_BPF, prog_fd) < 0) {
>   			err = -errno;
>   			pr_warn("prog '%s': failed to attach to perf_event FD %d: %s\n",
> -				prog->name, pfd, errstr(err));
> +				prog->name, pfd, libbpf_errstr(err));
>   			if (err == -EPROTO)
>   				pr_warn("prog '%s': try add PERF_SAMPLE_CALLCHAIN to or remove exclude_callchain_[kernel|user] from pfd %d\n",
>   					prog->name, pfd);
> @@ -10936,7 +10940,7 @@ struct bpf_link *bpf_program__attach_perf_event_opts(const struct bpf_program *p
>   	if (ioctl(pfd, PERF_EVENT_IOC_ENABLE, 0) < 0) {
>   		err = -errno;
>   		pr_warn("prog '%s': failed to enable perf_event FD %d: %s\n",
> -			prog->name, pfd, errstr(err));
> +			prog->name, pfd, libbpf_errstr(err));
>   		goto err_out;
>   	}
>   
> @@ -10966,13 +10970,13 @@ static int parse_uint_from_file(const char *file, const char *fmt)
>   	f = fopen(file, "re");
>   	if (!f) {
>   		err = -errno;
> -		pr_debug("failed to open '%s': %s\n", file, errstr(err));
> +		pr_debug("failed to open '%s': %s\n", file, libbpf_errstr(err));
>   		return err;
>   	}
>   	err = fscanf(f, fmt, &ret);
>   	if (err != 1) {
>   		err = err == EOF ? -EIO : -errno;
> -		pr_debug("failed to parse '%s': %s\n", file, errstr(err));
> +		pr_debug("failed to parse '%s': %s\n", file, libbpf_errstr(err));
>   		fclose(f);
>   		return err;
>   	}
> @@ -11028,7 +11032,7 @@ static int perf_event_open_probe(bool uprobe, bool retprobe, const char *name,
>   	if (type < 0) {
>   		pr_warn("failed to determine %s perf type: %s\n",
>   			uprobe ? "uprobe" : "kprobe",
> -			errstr(type));
> +			libbpf_errstr(type));
>   		return type;
>   	}
>   	if (retprobe) {
> @@ -11038,7 +11042,7 @@ static int perf_event_open_probe(bool uprobe, bool retprobe, const char *name,
>   		if (bit < 0) {
>   			pr_warn("failed to determine %s retprobe bit: %s\n",
>   				uprobe ? "uprobe" : "kprobe",
> -				errstr(bit));
> +				libbpf_errstr(bit));
>   			return bit;
>   		}
>   		attr.config |= 1 << bit;
> @@ -11173,7 +11177,7 @@ static int perf_event_kprobe_open_legacy(const char *probe_name, bool retprobe,
>   	if (err < 0) {
>   		pr_warn("failed to add legacy kprobe event for '%s+0x%zx': %s\n",
>   			kfunc_name, offset,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		return err;
>   	}
>   	type = determine_kprobe_perf_type_legacy(probe_name, retprobe);
> @@ -11181,7 +11185,7 @@ static int perf_event_kprobe_open_legacy(const char *probe_name, bool retprobe,
>   		err = type;
>   		pr_warn("failed to determine legacy kprobe event id for '%s+0x%zx': %s\n",
>   			kfunc_name, offset,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		goto err_clean_legacy;
>   	}
>   
> @@ -11197,7 +11201,7 @@ static int perf_event_kprobe_open_legacy(const char *probe_name, bool retprobe,
>   	if (pfd < 0) {
>   		err = -errno;
>   		pr_warn("legacy kprobe perf_event_open() failed: %s\n",
> -			errstr(err));
> +			libbpf_errstr(err));
>   		goto err_clean_legacy;
>   	}
>   	return pfd;
> @@ -11330,7 +11334,7 @@ bpf_program__attach_kprobe_opts(const struct bpf_program *prog,
>   		pr_warn("prog '%s': failed to create %s '%s+0x%zx' perf event: %s\n",
>   			prog->name, retprobe ? "kretprobe" : "kprobe",
>   			func_name, offset,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		goto err_out;
>   	}
>   	link = bpf_program__attach_perf_event_opts(prog, pfd, &pe_opts);
> @@ -11340,7 +11344,7 @@ bpf_program__attach_kprobe_opts(const struct bpf_program *prog,
>   		pr_warn("prog '%s': failed to attach to %s '%s+0x%zx': %s\n",
>   			prog->name, retprobe ? "kretprobe" : "kprobe",
>   			func_name, offset,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		goto err_clean_legacy;
>   	}
>   	if (legacy) {
> @@ -11500,7 +11504,7 @@ static int libbpf_available_kallsyms_parse(struct kprobe_multi_resolve *res)
>   	f = fopen(available_functions_file, "re");
>   	if (!f) {
>   		err = -errno;
> -		pr_warn("failed to open %s: %s\n", available_functions_file, errstr(err));
> +		pr_warn("failed to open %s: %s\n", available_functions_file, libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -11575,7 +11579,7 @@ static int libbpf_available_kprobes_parse(struct kprobe_multi_resolve *res)
>   	f = fopen(available_path, "re");
>   	if (!f) {
>   		err = -errno;
> -		pr_warn("failed to open %s: %s\n", available_path, errstr(err));
> +		pr_warn("failed to open %s: %s\n", available_path, libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -11699,7 +11703,7 @@ bpf_program__attach_kprobe_multi_opts(const struct bpf_program *prog,
>   	if (link_fd < 0) {
>   		err = -errno;
>   		pr_warn("prog '%s': failed to attach: %s\n",
> -			prog->name, errstr(err));
> +			prog->name, libbpf_errstr(err));
>   		goto error;
>   	}
>   	link->fd = link_fd;
> @@ -11909,14 +11913,14 @@ static int perf_event_uprobe_open_legacy(const char *probe_name, bool retprobe,
>   	err = add_uprobe_event_legacy(probe_name, retprobe, binary_path, offset);
>   	if (err < 0) {
>   		pr_warn("failed to add legacy uprobe event for %s:0x%zx: %s\n",
> -			binary_path, (size_t)offset, errstr(err));
> +			binary_path, (size_t)offset, libbpf_errstr(err));
>   		return err;
>   	}
>   	type = determine_uprobe_perf_type_legacy(probe_name, retprobe);
>   	if (type < 0) {
>   		err = type;
>   		pr_warn("failed to determine legacy uprobe event id for %s:0x%zx: %s\n",
> -			binary_path, offset, errstr(err));
> +			binary_path, offset, libbpf_errstr(err));
>   		goto err_clean_legacy;
>   	}
>   
> @@ -11931,7 +11935,7 @@ static int perf_event_uprobe_open_legacy(const char *probe_name, bool retprobe,
>   		      -1 /* group_fd */,  PERF_FLAG_FD_CLOEXEC);
>   	if (pfd < 0) {
>   		err = -errno;
> -		pr_warn("legacy uprobe perf_event_open() failed: %s\n", errstr(err));
> +		pr_warn("legacy uprobe perf_event_open() failed: %s\n", libbpf_errstr(err));
>   		goto err_clean_legacy;
>   	}
>   	return pfd;
> @@ -12156,7 +12160,7 @@ bpf_program__attach_uprobe_multi(const struct bpf_program *prog,
>   			err = resolve_full_path(path, full_path, sizeof(full_path));
>   			if (err) {
>   				pr_warn("prog '%s': failed to resolve full path for '%s': %s\n",
> -					prog->name, path, errstr(err));
> +					prog->name, path, libbpf_errstr(err));
>   				return libbpf_err_ptr(err);
>   			}
>   			path = full_path;
> @@ -12199,7 +12203,7 @@ bpf_program__attach_uprobe_multi(const struct bpf_program *prog,
>   	if (link_fd < 0) {
>   		err = -errno;
>   		pr_warn("prog '%s': failed to attach multi-uprobe: %s\n",
> -			prog->name, errstr(err));
> +			prog->name, libbpf_errstr(err));
>   		goto error;
>   	}
>   	link->fd = link_fd;
> @@ -12251,7 +12255,7 @@ bpf_program__attach_uprobe_opts(const struct bpf_program *prog, pid_t pid,
>   		err = resolve_full_path(binary_path, full_path, sizeof(full_path));
>   		if (err) {
>   			pr_warn("prog '%s': failed to resolve full path for '%s': %s\n",
> -				prog->name, binary_path, errstr(err));
> +				prog->name, binary_path, libbpf_errstr(err));
>   			return libbpf_err_ptr(err);
>   		}
>   		binary_path = full_path;
> @@ -12317,7 +12321,7 @@ bpf_program__attach_uprobe_opts(const struct bpf_program *prog, pid_t pid,
>   		pr_warn("prog '%s': failed to create %s '%s:0x%zx' perf event: %s\n",
>   			prog->name, retprobe ? "uretprobe" : "uprobe",
>   			binary_path, func_offset,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		goto err_out;
>   	}
>   
> @@ -12328,7 +12332,7 @@ bpf_program__attach_uprobe_opts(const struct bpf_program *prog, pid_t pid,
>   		pr_warn("prog '%s': failed to attach to %s '%s:0x%zx': %s\n",
>   			prog->name, retprobe ? "uretprobe" : "uprobe",
>   			binary_path, func_offset,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		goto err_clean_legacy;
>   	}
>   	if (legacy) {
> @@ -12450,7 +12454,7 @@ struct bpf_link *bpf_program__attach_usdt(const struct bpf_program *prog,
>   		err = resolve_full_path(binary_path, resolved_path, sizeof(resolved_path));
>   		if (err) {
>   			pr_warn("prog '%s': failed to resolve full path for '%s': %s\n",
> -				prog->name, binary_path, errstr(err));
> +				prog->name, binary_path, libbpf_errstr(err));
>   			return libbpf_err_ptr(err);
>   		}
>   		binary_path = resolved_path;
> @@ -12534,7 +12538,7 @@ static int perf_event_open_tracepoint(const char *tp_category,
>   	if (tp_id < 0) {
>   		pr_warn("failed to determine tracepoint '%s/%s' perf event ID: %s\n",
>   			tp_category, tp_name,
> -			errstr(tp_id));
> +			libbpf_errstr(tp_id));
>   		return tp_id;
>   	}
>   
> @@ -12549,7 +12553,7 @@ static int perf_event_open_tracepoint(const char *tp_category,
>   		err = -errno;
>   		pr_warn("tracepoint '%s/%s' perf_event_open() failed: %s\n",
>   			tp_category, tp_name,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		return err;
>   	}
>   	return pfd;
> @@ -12573,7 +12577,7 @@ struct bpf_link *bpf_program__attach_tracepoint_opts(const struct bpf_program *p
>   	if (pfd < 0) {
>   		pr_warn("prog '%s': failed to create tracepoint '%s/%s' perf event: %s\n",
>   			prog->name, tp_category, tp_name,
> -			errstr(pfd));
> +			libbpf_errstr(pfd));
>   		return libbpf_err_ptr(pfd);
>   	}
>   	link = bpf_program__attach_perf_event_opts(prog, pfd, &pe_opts);
> @@ -12582,7 +12586,7 @@ struct bpf_link *bpf_program__attach_tracepoint_opts(const struct bpf_program *p
>   		close(pfd);
>   		pr_warn("prog '%s': failed to attach to tracepoint '%s/%s': %s\n",
>   			prog->name, tp_category, tp_name,
> -			errstr(err));
> +			libbpf_errstr(err));
>   		return libbpf_err_ptr(err);
>   	}
>   	return link;
> @@ -12657,7 +12661,7 @@ bpf_program__attach_raw_tracepoint_opts(const struct bpf_program *prog,
>   		pfd = -errno;
>   		free(link);
>   		pr_warn("prog '%s': failed to attach to raw tracepoint '%s': %s\n",
> -			prog->name, tp_name, errstr(pfd));
> +			prog->name, tp_name, libbpf_errstr(pfd));
>   		return libbpf_err_ptr(pfd);
>   	}
>   	link->fd = pfd;
> @@ -12740,7 +12744,7 @@ static struct bpf_link *bpf_program__attach_btf_id(const struct bpf_program *pro
>   		pfd = -errno;
>   		free(link);
>   		pr_warn("prog '%s': failed to attach: %s\n",
> -			prog->name, errstr(pfd));
> +			prog->name, libbpf_errstr(pfd));
>   		return libbpf_err_ptr(pfd);
>   	}
>   	link->fd = pfd;
> @@ -12802,7 +12806,7 @@ bpf_program_attach_fd(const struct bpf_program *prog,
>   		free(link);
>   		pr_warn("prog '%s': failed to attach to %s: %s\n",
>   			prog->name, target_name,
> -			errstr(link_fd));
> +			libbpf_errstr(link_fd));
>   		return libbpf_err_ptr(link_fd);
>   	}
>   	link->fd = link_fd;
> @@ -12971,7 +12975,7 @@ bpf_program__attach_iter(const struct bpf_program *prog,
>   		link_fd = -errno;
>   		free(link);
>   		pr_warn("prog '%s': failed to attach to iterator: %s\n",
> -			prog->name, errstr(link_fd));
> +			prog->name, libbpf_errstr(link_fd));
>   		return libbpf_err_ptr(link_fd);
>   	}
>   	link->fd = link_fd;
> @@ -13016,7 +13020,7 @@ struct bpf_link *bpf_program__attach_netfilter(const struct bpf_program *prog,
>   		link_fd = -errno;
>   		free(link);
>   		pr_warn("prog '%s': failed to attach to netfilter: %s\n",
> -			prog->name, errstr(link_fd));
> +			prog->name, libbpf_errstr(link_fd));
>   		return libbpf_err_ptr(link_fd);
>   	}
>   	link->fd = link_fd;
> @@ -13316,7 +13320,7 @@ perf_buffer__open_cpu_buf(struct perf_buffer *pb, struct perf_event_attr *attr,
>   	if (cpu_buf->fd < 0) {
>   		err = -errno;
>   		pr_warn("failed to open perf buffer event on cpu #%d: %s\n",
> -			cpu, errstr(err));
> +			cpu, libbpf_errstr(err));
>   		goto error;
>   	}
>   
> @@ -13327,14 +13331,14 @@ perf_buffer__open_cpu_buf(struct perf_buffer *pb, struct perf_event_attr *attr,
>   		cpu_buf->base = NULL;
>   		err = -errno;
>   		pr_warn("failed to mmap perf buffer on cpu #%d: %s\n",
> -			cpu, errstr(err));
> +			cpu, libbpf_errstr(err));
>   		goto error;
>   	}
>   
>   	if (ioctl(cpu_buf->fd, PERF_EVENT_IOC_ENABLE, 0) < 0) {
>   		err = -errno;
>   		pr_warn("failed to enable perf buffer event on cpu #%d: %s\n",
> -			cpu, errstr(err));
> +			cpu, libbpf_errstr(err));
>   		goto error;
>   	}
>   
> @@ -13432,7 +13436,7 @@ static struct perf_buffer *__perf_buffer__new(int map_fd, size_t page_cnt,
>   		 */
>   		if (err != -EINVAL) {
>   			pr_warn("failed to get map info for map FD %d: %s\n",
> -				map_fd, errstr(err));
> +				map_fd, libbpf_errstr(err));
>   			return ERR_PTR(err);
>   		}
>   		pr_debug("failed to get map info for FD %d; API not supported? Ignoring...\n",
> @@ -13462,7 +13466,7 @@ static struct perf_buffer *__perf_buffer__new(int map_fd, size_t page_cnt,
>   	if (pb->epoll_fd < 0) {
>   		err = -errno;
>   		pr_warn("failed to create epoll instance: %s\n",
> -			errstr(err));
> +			libbpf_errstr(err));
>   		goto error;
>   	}
>   
> @@ -13493,7 +13497,7 @@ static struct perf_buffer *__perf_buffer__new(int map_fd, size_t page_cnt,
>   
>   	err = parse_cpu_mask_file(online_cpus_file, &online, &n);
>   	if (err) {
> -		pr_warn("failed to get online CPU mask: %s\n", errstr(err));
> +		pr_warn("failed to get online CPU mask: %s\n", libbpf_errstr(err));
>   		goto error;
>   	}
>   
> @@ -13524,7 +13528,7 @@ static struct perf_buffer *__perf_buffer__new(int map_fd, size_t page_cnt,
>   			err = -errno;
>   			pr_warn("failed to set cpu #%d, key %d -> perf FD %d: %s\n",
>   				cpu, map_key, cpu_buf->fd,
> -				errstr(err));
> +				libbpf_errstr(err));
>   			goto error;
>   		}
>   
> @@ -13535,7 +13539,7 @@ static struct perf_buffer *__perf_buffer__new(int map_fd, size_t page_cnt,
>   			err = -errno;
>   			pr_warn("failed to epoll_ctl cpu #%d perf FD %d: %s\n",
>   				cpu, cpu_buf->fd,
> -				errstr(err));
> +				libbpf_errstr(err));
>   			goto error;
>   		}
>   		j++;
> @@ -13630,7 +13634,7 @@ int perf_buffer__poll(struct perf_buffer *pb, int timeout_ms)
>   
>   		err = perf_buffer__process_records(pb, cpu_buf);
>   		if (err) {
> -			pr_warn("error while processing records: %s\n", errstr(err));
> +			pr_warn("error while processing records: %s\n", libbpf_errstr(err));
>   			return libbpf_err(err);
>   		}
>   	}
> @@ -13715,7 +13719,7 @@ int perf_buffer__consume(struct perf_buffer *pb)
>   		err = perf_buffer__process_records(pb, cpu_buf);
>   		if (err) {
>   			pr_warn("perf_buffer: failed to process records in buffer #%d: %s\n",
> -				i, errstr(err));
> +				i, libbpf_errstr(err));
>   			return libbpf_err(err);
>   		}
>   	}
> @@ -13826,14 +13830,14 @@ int parse_cpu_mask_file(const char *fcpu, bool **mask, int *mask_sz)
>   	fd = open(fcpu, O_RDONLY | O_CLOEXEC);
>   	if (fd < 0) {
>   		err = -errno;
> -		pr_warn("Failed to open cpu mask file %s: %s\n", fcpu, errstr(err));
> +		pr_warn("Failed to open cpu mask file %s: %s\n", fcpu, libbpf_errstr(err));
>   		return err;
>   	}
>   	len = read(fd, buf, sizeof(buf));
>   	close(fd);
>   	if (len <= 0) {
>   		err = len ? -errno : -EINVAL;
> -		pr_warn("Failed to read cpu mask from %s: %s\n", fcpu, errstr(err));
> +		pr_warn("Failed to read cpu mask from %s: %s\n", fcpu, libbpf_errstr(err));
>   		return err;
>   	}
>   	if (len >= sizeof(buf)) {
> @@ -13926,20 +13930,22 @@ int bpf_object__open_skeleton(struct bpf_object_skeleton *s,
>   	if (IS_ERR(obj)) {
>   		err = PTR_ERR(obj);
>   		pr_warn("failed to initialize skeleton BPF object '%s': %s\n",
> -			s->name, errstr(err));
> +			s->name, libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
>   	*s->obj = obj;
>   	err = populate_skeleton_maps(obj, s->maps, s->map_cnt, s->map_skel_sz);
>   	if (err) {
> -		pr_warn("failed to populate skeleton maps for '%s': %s\n", s->name, errstr(err));
> +		pr_warn("failed to populate skeleton maps for '%s': %s\n", s->name,
> +			libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
>   	err = populate_skeleton_progs(obj, s->progs, s->prog_cnt, s->prog_skel_sz);
>   	if (err) {
> -		pr_warn("failed to populate skeleton progs for '%s': %s\n", s->name, errstr(err));
> +		pr_warn("failed to populate skeleton progs for '%s': %s\n", s->name,
> +			libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
> @@ -13969,13 +13975,13 @@ int bpf_object__open_subskeleton(struct bpf_object_subskeleton *s)
>   
>   	err = populate_skeleton_maps(s->obj, s->maps, s->map_cnt, s->map_skel_sz);
>   	if (err) {
> -		pr_warn("failed to populate subskeleton maps: %s\n", errstr(err));
> +		pr_warn("failed to populate subskeleton maps: %s\n", libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
>   	err = populate_skeleton_progs(s->obj, s->progs, s->prog_cnt, s->prog_skel_sz);
>   	if (err) {
> -		pr_warn("failed to populate subskeleton maps: %s\n", errstr(err));
> +		pr_warn("failed to populate subskeleton maps: %s\n", libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
> @@ -14022,7 +14028,7 @@ int bpf_object__load_skeleton(struct bpf_object_skeleton *s)
>   
>   	err = bpf_object__load(*s->obj);
>   	if (err) {
> -		pr_warn("failed to load BPF skeleton '%s': %s\n", s->name, errstr(err));
> +		pr_warn("failed to load BPF skeleton '%s': %s\n", s->name, libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
> @@ -14062,7 +14068,7 @@ int bpf_object__attach_skeleton(struct bpf_object_skeleton *s)
>   		err = prog->sec_def->prog_attach_fn(prog, prog->sec_def->cookie, link);
>   		if (err) {
>   			pr_warn("prog '%s': failed to auto-attach: %s\n",
> -				bpf_program__name(prog), errstr(err));
> +				bpf_program__name(prog), libbpf_errstr(err));
>   			return libbpf_err(err);
>   		}
>   
> @@ -14106,7 +14112,7 @@ int bpf_object__attach_skeleton(struct bpf_object_skeleton *s)
>   		if (!*link) {
>   			err = -errno;
>   			pr_warn("map '%s': failed to auto-attach: %s\n",
> -				bpf_map__name(map), errstr(err));
> +				bpf_map__name(map), libbpf_errstr(err));
>   			return libbpf_err(err);
>   		}
>   	}
> diff --git a/tools/lib/bpf/linker.c b/tools/lib/bpf/linker.c
> index 800e0ef09c37..6ad79b18ef58 100644
> --- a/tools/lib/bpf/linker.c
> +++ b/tools/lib/bpf/linker.c
> @@ -530,7 +530,7 @@ int bpf_linker__add_file(struct bpf_linker *linker, const char *filename,
>   	fd = open(filename, O_RDONLY | O_CLOEXEC);
>   	if (fd < 0) {
>   		err = -errno;
> -		pr_warn("failed to open file '%s': %s\n", filename, errstr(err));
> +		pr_warn("failed to open file '%s': %s\n", filename, libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
> @@ -576,7 +576,7 @@ int bpf_linker__add_buf(struct bpf_linker *linker, void *buf, size_t buf_sz,
>   	fd = memfd_create(filename, 0);
>   	if (fd < 0) {
>   		ret = -errno;
> -		pr_warn("failed to create memfd '%s': %s\n", filename, errstr(ret));
> +		pr_warn("failed to create memfd '%s': %s\n", filename, libbpf_errstr(ret));
>   		return libbpf_err(ret);
>   	}
>   
> @@ -585,7 +585,7 @@ int bpf_linker__add_buf(struct bpf_linker *linker, void *buf, size_t buf_sz,
>   		ret = write(fd, buf, buf_sz);
>   		if (ret < 0) {
>   			ret = -errno;
> -			pr_warn("failed to write '%s': %s\n", filename, errstr(ret));
> +			pr_warn("failed to write '%s': %s\n", filename, libbpf_errstr(ret));
>   			goto err_out;
>   		}
>   		written += ret;
> @@ -785,7 +785,7 @@ static int linker_load_obj_file(struct bpf_linker *linker,
>   				err = libbpf_get_error(obj->btf);
>   				if (err) {
>   					pr_warn("failed to parse .BTF from %s: %s\n",
> -						obj->filename, errstr(err));
> +						obj->filename, libbpf_errstr(err));
>   					return err;
>   				}
>   				sec->skipped = true;
> @@ -796,7 +796,7 @@ static int linker_load_obj_file(struct bpf_linker *linker,
>   				err = libbpf_get_error(obj->btf_ext);
>   				if (err) {
>   					pr_warn("failed to parse .BTF.ext from '%s': %s\n",
> -						obj->filename, errstr(err));
> +						obj->filename, libbpf_errstr(err));
>   					return err;
>   				}
>   				sec->skipped = true;
> @@ -2891,14 +2891,14 @@ static int finalize_btf(struct bpf_linker *linker)
>   
>   	err = finalize_btf_ext(linker);
>   	if (err) {
> -		pr_warn(".BTF.ext generation failed: %s\n", errstr(err));
> +		pr_warn(".BTF.ext generation failed: %s\n", libbpf_errstr(err));
>   		return err;
>   	}
>   
>   	opts.btf_ext = linker->btf_ext;
>   	err = btf__dedup(linker->btf, &opts);
>   	if (err) {
> -		pr_warn("BTF dedup failed: %s\n", errstr(err));
> +		pr_warn("BTF dedup failed: %s\n", libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -2916,7 +2916,7 @@ static int finalize_btf(struct bpf_linker *linker)
>   
>   	err = emit_elf_data_sec(linker, BTF_ELF_SEC, 8, raw_data, raw_sz);
>   	if (err) {
> -		pr_warn("failed to write out .BTF ELF section: %s\n", errstr(err));
> +		pr_warn("failed to write out .BTF ELF section: %s\n", libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -2928,7 +2928,8 @@ static int finalize_btf(struct bpf_linker *linker)
>   
>   		err = emit_elf_data_sec(linker, BTF_EXT_ELF_SEC, 8, raw_data, raw_sz);
>   		if (err) {
> -			pr_warn("failed to write out .BTF.ext ELF section: %s\n", errstr(err));
> +			pr_warn("failed to write out .BTF.ext ELF section: %s\n",
> +				libbpf_errstr(err));
>   			return err;
>   		}
>   	}
> @@ -3104,7 +3105,7 @@ static int finalize_btf_ext(struct bpf_linker *linker)
>   	err = libbpf_get_error(linker->btf_ext);
>   	if (err) {
>   		linker->btf_ext = NULL;
> -		pr_warn("failed to parse final .BTF.ext data: %s\n", errstr(err));
> +		pr_warn("failed to parse final .BTF.ext data: %s\n", libbpf_errstr(err));
>   		goto out;
>   	}
>   
> diff --git a/tools/lib/bpf/ringbuf.c b/tools/lib/bpf/ringbuf.c
> index 9702b70da444..2ea03b35a3ef 100644
> --- a/tools/lib/bpf/ringbuf.c
> +++ b/tools/lib/bpf/ringbuf.c
> @@ -90,7 +90,7 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
>   	if (err) {
>   		err = -errno;
>   		pr_warn("ringbuf: failed to get map info for fd=%d: %s\n",
> -			map_fd, errstr(err));
> +			map_fd, libbpf_errstr(err));
>   		return libbpf_err(err);
>   	}
>   
> @@ -125,7 +125,7 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
>   	if (tmp == MAP_FAILED) {
>   		err = -errno;
>   		pr_warn("ringbuf: failed to mmap consumer page for map fd=%d: %s\n",
> -			map_fd, errstr(err));
> +			map_fd, libbpf_errstr(err));
>   		goto err_out;
>   	}
>   	r->consumer_pos = tmp;
> @@ -144,7 +144,7 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
>   	if (tmp == MAP_FAILED) {
>   		err = -errno;
>   		pr_warn("ringbuf: failed to mmap data pages for map fd=%d: %s\n",
> -			map_fd, errstr(err));
> +			map_fd, libbpf_errstr(err));
>   		goto err_out;
>   	}
>   	r->producer_pos = tmp;
> @@ -158,7 +158,7 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
>   	if (epoll_ctl(rb->epoll_fd, EPOLL_CTL_ADD, map_fd, e) < 0) {
>   		err = -errno;
>   		pr_warn("ringbuf: failed to epoll add map fd=%d: %s\n",
> -			map_fd, errstr(err));
> +			map_fd, libbpf_errstr(err));
>   		goto err_out;
>   	}
>   
> @@ -206,7 +206,7 @@ ring_buffer__new(int map_fd, ring_buffer_sample_fn sample_cb, void *ctx,
>   	rb->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
>   	if (rb->epoll_fd < 0) {
>   		err = -errno;
> -		pr_warn("ringbuf: failed to create epoll instance: %s\n", errstr(err));
> +		pr_warn("ringbuf: failed to create epoll instance: %s\n", libbpf_errstr(err));
>   		goto err_out;
>   	}
>   
> @@ -460,7 +460,7 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
>   	if (err) {
>   		err = -errno;
>   		pr_warn("user ringbuf: failed to get map info for fd=%d: %s\n",
> -			map_fd, errstr(err));
> +			map_fd, libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -477,7 +477,7 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
>   	if (tmp == MAP_FAILED) {
>   		err = -errno;
>   		pr_warn("user ringbuf: failed to mmap consumer page for map fd=%d: %s\n",
> -			map_fd, errstr(err));
> +			map_fd, libbpf_errstr(err));
>   		return err;
>   	}
>   	rb->consumer_pos = tmp;
> @@ -497,7 +497,7 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
>   	if (tmp == MAP_FAILED) {
>   		err = -errno;
>   		pr_warn("user ringbuf: failed to mmap data pages for map fd=%d: %s\n",
> -			map_fd, errstr(err));
> +			map_fd, libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -508,7 +508,8 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
>   	rb_epoll->events = EPOLLOUT;
>   	if (epoll_ctl(rb->epoll_fd, EPOLL_CTL_ADD, map_fd, rb_epoll) < 0) {
>   		err = -errno;
> -		pr_warn("user ringbuf: failed to epoll add map fd=%d: %s\n", map_fd, errstr(err));
> +		pr_warn("user ringbuf: failed to epoll add map fd=%d: %s\n", map_fd,
> +			libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -533,7 +534,7 @@ user_ring_buffer__new(int map_fd, const struct user_ring_buffer_opts *opts)
>   	rb->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
>   	if (rb->epoll_fd < 0) {
>   		err = -errno;
> -		pr_warn("user ringbuf: failed to create epoll instance: %s\n", errstr(err));
> +		pr_warn("user ringbuf: failed to create epoll instance: %s\n", libbpf_errstr(err));
>   		goto err_out;
>   	}
>   
> diff --git a/tools/lib/bpf/str_error.c b/tools/lib/bpf/str_error.c
> index 8743049e32b7..9a541762f54c 100644
> --- a/tools/lib/bpf/str_error.c
> +++ b/tools/lib/bpf/str_error.c
> @@ -36,7 +36,7 @@ char *libbpf_strerror_r(int err, char *dst, int len)
>   	return dst;
>   }
>   
> -const char *errstr(int err)
> +const char *libbpf_errstr(int err)
>   {
>   	static __thread char buf[12];
>   
> diff --git a/tools/lib/bpf/str_error.h b/tools/lib/bpf/str_error.h
> index 66ffebde0684..2f7725072c5c 100644
> --- a/tools/lib/bpf/str_error.h
> +++ b/tools/lib/bpf/str_error.h
> @@ -7,10 +7,10 @@
>   char *libbpf_strerror_r(int err, char *dst, int len);
>   
>   /**
> - * @brief **errstr()** returns string corresponding to numeric errno
> + * @brief **libbpf_errstr()** returns string corresponding to numeric errno
>    * @param err negative numeric errno
>    * @return pointer to string representation of the errno, that is invalidated
>    * upon the next call.
>    */
> -const char *errstr(int err);
> +const char *libbpf_errstr(int err);
>   #endif /* __LIBBPF_STR_ERROR_H */
> diff --git a/tools/lib/bpf/usdt.c b/tools/lib/bpf/usdt.c
> index 4e4a52742b01..c91a7b3af2d3 100644
> --- a/tools/lib/bpf/usdt.c
> +++ b/tools/lib/bpf/usdt.c
> @@ -467,7 +467,7 @@ static int parse_vma_segs(int pid, const char *lib_path, struct elf_seg **segs,
>   
>   	if (!realpath(lib_path, path)) {
>   		pr_warn("usdt: failed to get absolute path of '%s' (err %s), using path as is...\n",
> -			lib_path, errstr(-errno));
> +			lib_path, libbpf_errstr(-errno));
>   		libbpf_strlcpy(path, lib_path, sizeof(path));
>   	}
>   
> @@ -477,7 +477,7 @@ static int parse_vma_segs(int pid, const char *lib_path, struct elf_seg **segs,
>   	if (!f) {
>   		err = -errno;
>   		pr_warn("usdt: failed to open '%s' to get base addr of '%s': %s\n",
> -			line, lib_path, errstr(err));
> +			line, lib_path, libbpf_errstr(err));
>   		return err;
>   	}
>   
> @@ -608,7 +608,7 @@ static int collect_usdt_targets(struct usdt_manager *man, Elf *elf, const char *
>   	err = parse_elf_segs(elf, path, &segs, &seg_cnt);
>   	if (err) {
>   		pr_warn("usdt: failed to process ELF program segments for '%s': %s\n",
> -			path, errstr(err));
> +			path, libbpf_errstr(err));
>   		goto err_out;
>   	}
>   
> @@ -711,7 +711,7 @@ static int collect_usdt_targets(struct usdt_manager *man, Elf *elf, const char *
>   				err = parse_vma_segs(pid, path, &vma_segs, &vma_seg_cnt);
>   				if (err) {
>   					pr_warn("usdt: failed to get memory segments in PID %d for shared library '%s': %s\n",
> -						pid, path, errstr(err));
> +						pid, path, libbpf_errstr(err));
>   					goto err_out;
>   				}
>   			}
> @@ -1050,7 +1050,7 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
>   		if (is_new && bpf_map_update_elem(spec_map_fd, &spec_id, &target->spec, BPF_ANY)) {
>   			err = -errno;
>   			pr_warn("usdt: failed to set USDT spec #%d for '%s:%s' in '%s': %s\n",
> -				spec_id, usdt_provider, usdt_name, path, errstr(err));
> +				spec_id, usdt_provider, usdt_name, path, libbpf_errstr(err));
>   			goto err_out;
>   		}
>   		if (!man->has_bpf_cookie &&
> @@ -1062,7 +1062,7 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
>   			} else {
>   				pr_warn("usdt: failed to map IP 0x%lx to spec #%d for '%s:%s' in '%s': %s\n",
>   					target->abs_ip, spec_id, usdt_provider, usdt_name,
> -					path, errstr(err));
> +					path, libbpf_errstr(err));
>   			}
>   			goto err_out;
>   		}
> @@ -1079,7 +1079,7 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
>   			err = libbpf_get_error(uprobe_link);
>   			if (err) {
>   				pr_warn("usdt: failed to attach uprobe #%d for '%s:%s' in '%s': %s\n",
> -					i, usdt_provider, usdt_name, path, errstr(err));
> +					i, usdt_provider, usdt_name, path, libbpf_errstr(err));
>   				goto err_out;
>   			}
>   
> @@ -1102,7 +1102,7 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
>   		if (!link->multi_link) {
>   			err = -errno;
>   			pr_warn("usdt: failed to attach uprobe multi for '%s:%s' in '%s': %s\n",
> -				usdt_provider, usdt_name, path, errstr(err));
> +				usdt_provider, usdt_name, path, libbpf_errstr(err));
>   			goto err_out;
>   		}
>   
Thanks for the patch. Looks good.
Acked-by: Mykyta Yatsenko <yatsenko@...a.com>



Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ