The 'bpf()' syscall is leaking the ENOTSUPP errno that is internal to the kernel[1]. More recent code is already using the correct EOPNOTSUPP, but changing older return codes is not possible due to dependency concerns, so handle ENOTSUPP in libbpf_strerror(). [1] https://lore.kernel.org/netdev/20200511165319.2251678-1-kuba@xxxxxxxxxx/ Signed-off-by: Pedro Tammela <pctammela@xxxxxxxxxxxx> --- tools/lib/bpf/libbpf_errno.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/lib/bpf/libbpf_errno.c b/tools/lib/bpf/libbpf_errno.c index 0afb51f7a919..7de8bbc34a37 100644 --- a/tools/lib/bpf/libbpf_errno.c +++ b/tools/lib/bpf/libbpf_errno.c @@ -13,6 +13,9 @@ #include "libbpf.h" +/* This errno is internal to the kernel but leaks in the bpf() syscall. */ +#define ENOTSUPP 524 + /* make sure libbpf doesn't use kernel-only integer typedefs */ #pragma GCC poison u8 u16 u32 u64 s8 s16 s32 s64 @@ -43,6 +46,12 @@ int libbpf_strerror(int err, char *buf, size_t size) err = err > 0 ? err : -err; + if (err == ENOTSUPP) { + snprintf(buf, size, "Operation not supported"); + buf[size - 1] = '\0'; + return 0; + } + if (err < __LIBBPF_ERRNO__START) { int ret; -- 2.25.1