Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

libbpf: add "prog_flags" to bpf_program/bpf_prog_load_attr/bpf_load_program_attr

libbpf doesn't allow passing "prog_flags" during bpf program load in a
couple of load related APIs, "bpf_load_program_xattr", "load_program" and
"bpf_prog_load_xattr".

It makes sense to allow passing "prog_flags" which is useful for
customizing program loading.

Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Jiong Wang and committed by
Alexei Starovoitov
04656198 d6c2308c

+6
+1
tools/lib/bpf/bpf.c
··· 256 256 if (load_attr->name) 257 257 memcpy(attr.prog_name, load_attr->name, 258 258 min(strlen(load_attr->name), BPF_OBJ_NAME_LEN - 1)); 259 + attr.prog_flags = load_attr->prog_flags; 259 260 260 261 fd = sys_bpf_prog_load(&attr, sizeof(attr)); 261 262 if (fd >= 0)
+1
tools/lib/bpf/bpf.h
··· 87 87 const void *line_info; 88 88 __u32 line_info_cnt; 89 89 __u32 log_level; 90 + __u32 prog_flags; 90 91 }; 91 92 92 93 /* Flags to direct loading requirements */
+3
tools/lib/bpf/libbpf.c
··· 188 188 void *line_info; 189 189 __u32 line_info_rec_size; 190 190 __u32 line_info_cnt; 191 + __u32 prog_flags; 191 192 }; 192 193 193 194 enum libbpf_map_type { ··· 2077 2076 load_attr.line_info_rec_size = prog->line_info_rec_size; 2078 2077 load_attr.line_info_cnt = prog->line_info_cnt; 2079 2078 load_attr.log_level = prog->log_level; 2079 + load_attr.prog_flags = prog->prog_flags; 2080 2080 if (!load_attr.insns || !load_attr.insns_cnt) 2081 2081 return -EINVAL; 2082 2082 ··· 3523 3521 expected_attach_type); 3524 3522 3525 3523 prog->log_level = attr->log_level; 3524 + prog->prog_flags = attr->prog_flags; 3526 3525 if (!first_prog) 3527 3526 first_prog = prog; 3528 3527 }
+1
tools/lib/bpf/libbpf.h
··· 320 320 enum bpf_attach_type expected_attach_type; 321 321 int ifindex; 322 322 int log_level; 323 + int prog_flags; 323 324 }; 324 325 325 326 LIBBPF_API int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,