Fix kernel version check for program loading
Before this CL, the kernel version check occurred after all programs were loaded by `open_file.load()`. This CL moves the check before `open_file.load()`. It calls `prog.set_autoload(false)` for programs incompatible with the current kernel, preventing their auto-load by libbpf. Test: Verify the program is not loaded if the kver is out of range Bug: 410982483 Change-Id: Ifacd9dd8696a7bb4fd186ad1faf01fba9f021c6d
This commit is contained in:
parent
91e5b0ba66
commit
315feea5fc
1 changed files with 19 additions and 7 deletions
|
|
@ -348,6 +348,23 @@ fn set_skip_loading(
|
|||
}
|
||||
}
|
||||
|
||||
for mut prog in open_file.progs_mut() {
|
||||
let name =
|
||||
prog.name().to_str().ok_or_else(|| anyhow!("Failed to parse prog name into UTF-8"))?;
|
||||
for prog_desc in file_desc.progs {
|
||||
if prog_desc.name == name {
|
||||
if kvers < prog_desc.min_kver || kvers >= prog_desc.max_kver {
|
||||
info!(
|
||||
"skipping program {} min_kver:{:x} max_kver:{:x} kvers:{:x}",
|
||||
name, prog_desc.min_kver, prog_desc.max_kver, kvers
|
||||
);
|
||||
prog.set_autoload(false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
@ -374,8 +391,6 @@ fn libbpf_worker(file_desc: &BpfFileDesc) -> Result<(), anyhow::Error> {
|
|||
let bpffs_path = "/sys/fs/bpf/".to_owned() + file_desc.prefix;
|
||||
create_dir(Path::new(&bpffs_path))?;
|
||||
|
||||
let kvers = kernel_version()?;
|
||||
|
||||
for mut map in loaded_file.maps_mut() {
|
||||
let mut desc_found = false;
|
||||
let name =
|
||||
|
|
@ -430,11 +445,8 @@ fn libbpf_worker(file_desc: &BpfFileDesc) -> Result<(), anyhow::Error> {
|
|||
for prog_desc in file_desc.progs {
|
||||
if prog_desc.name == name {
|
||||
desc_found = true;
|
||||
if kvers < prog_desc.min_kver || kvers >= prog_desc.max_kver {
|
||||
info!(
|
||||
"skipping program {} min_kver:{:x} max_kver:{:x} kvers:{:x}",
|
||||
name, prog_desc.min_kver, prog_desc.max_kver, kvers
|
||||
);
|
||||
if !prog.autoload() {
|
||||
// This program is not loaded
|
||||
continue;
|
||||
}
|
||||
let pinpath_str = bpffs_path.clone() + "prog_" + filename + "_" + &name;
|
||||
|
|
|
|||
Loading…
Reference in a new issue