libbpf: Fix faccessat() usage on Android
authorAndrii Nakryiko <andrii@kernel.org>
Fri, 26 Jan 2024 22:09:44 +0000 (14:09 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 29 Jan 2024 15:17:44 +0000 (16:17 +0100)
commitad57654053805bf9a62602aaec74cc78edb6f235
treed6f66e87082111583b271b5dff78a22745acb1c4
parent29788f39a4171dd48a6d19eb78cf2ab168c4349a
libbpf: Fix faccessat() usage on Android

Android implementation of libc errors out with -EINVAL in faccessat() if
passed AT_EACCESS ([0]), this leads to ridiculous issue with libbpf
refusing to load /sys/kernel/btf/vmlinux on Androids ([1]). Fix by
detecting Android and redefining AT_EACCESS to 0, it's equivalent on
Android.

  [0] https://android.googlesource.com/platform/bionic/+/refs/heads/android13-release/libc/bionic/faccessat.cpp#50
  [1] https://github.com/libbpf/libbpf-bootstrap/issues/250#issuecomment-1911324250

Fixes: 6a4ab8869d0b ("libbpf: Fix the case of running as non-root with capabilities")
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/bpf/20240126220944.2497665-1-andrii@kernel.org
tools/lib/bpf/libbpf_internal.h