libbpf: Correctly set the kernel code version in Debian kernel.
authorHao Xiang <hao.xiang@bytedance.com>
Fri, 3 Feb 2023 23:48:42 +0000 (23:48 +0000)
committerAndrii Nakryiko <andrii@kernel.org>
Mon, 6 Feb 2023 22:30:50 +0000 (14:30 -0800)
commitd1d7730ff8756c6db20ff82096b577d8cfbaf547
treee323f1edaa7f07ac76066fc50b229fe323fb6857
parent17c9b4e1a7d14719378c3eedefc2960018f5a7bb
libbpf: Correctly set the kernel code version in Debian kernel.

In a previous commit, Ubuntu kernel code version is correctly set
by retrieving the information from /proc/version_signature.

commit<5b3d72987701d51bf31823b39db49d10970f5c2d>
(libbpf: Improve LINUX_VERSION_CODE detection)

The /proc/version_signature file doesn't present in at least the
older versions of Debian distributions (eg, Debian 9, 10). The Debian
kernel has a similar issue where the release information from uname()
syscall doesn't give the kernel code version that matches what the
kernel actually expects. Below is an example content from Debian 10.

release: 4.19.0-23-amd64
version: #1 SMP Debian 4.19.269-1 (2022-12-20) x86_64

Debian reports incorrect kernel version in utsname::release returned
by uname() syscall, which in older kernels (Debian 9, 10) leads to
kprobe BPF programs failing to load due to the version check mismatch.

Fortunately, the correct kernel code version presents in the
utsname::version returned by uname() syscall in Debian kernels. This
change adds another get kernel version function to handle Debian in
addition to the previously added get kernel version function to handle
Ubuntu. Some minor refactoring work is also done to make the code more
readable.

Signed-off-by: Hao Xiang <hao.xiang@bytedance.com>
Signed-off-by: Ho-Ren (Jack) Chuang <horenchuang@bytedance.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20230203234842.2933903-1-hao.xiang@bytedance.com
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf_probes.c