Commit bf977ee4 authored by Alexei Starovoitov's avatar Alexei Starovoitov

Merge branch 'fix-compiler-warnings-looking-for-suggestions'

Rafael Passos says:

====================
Fix compiler warnings, looking for suggestions

Hi,
This patchset has a few fixes to compiler warnings.
I am studying the BPF subsystem and wish to bring more tangible contributions.
I would appreciate receiving suggestions on things to investigate.
I also documented a bit in my blog. I could help with docs here, too.
https://rcpassos.me/post/linux-ebpf-understanding-kernel-level-mechanics
Thanks!

Changelog V1 -> V2:
- rebased all commits to updated for-next base
- removes new cases of the extra parameter for bpf_jit_binary_pack_finalize
- built and tested for ARM64
- sent the series for the test workflow:
  https://github.com/kernel-patches/bpf/pull/7198
====================
Acked-by: default avatarPuranjay Mohan <puranjay@kernel.org>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/r/20240615022641.210320-1-rafael@rcpassos.meSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parents 3b063043 21ab4980
...@@ -1829,8 +1829,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog) ...@@ -1829,8 +1829,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
prog->jited_len = 0; prog->jited_len = 0;
goto out_free_hdr; goto out_free_hdr;
} }
if (WARN_ON(bpf_jit_binary_pack_finalize(prog, ro_header, if (WARN_ON(bpf_jit_binary_pack_finalize(ro_header, header))) {
header))) {
/* ro_header has been freed */ /* ro_header has been freed */
ro_header = NULL; ro_header = NULL;
prog = orig_prog; prog = orig_prog;
......
...@@ -225,7 +225,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp) ...@@ -225,7 +225,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
fp->jited_len = proglen + FUNCTION_DESCR_SIZE; fp->jited_len = proglen + FUNCTION_DESCR_SIZE;
if (!fp->is_func || extra_pass) { if (!fp->is_func || extra_pass) {
if (bpf_jit_binary_pack_finalize(fp, fhdr, hdr)) { if (bpf_jit_binary_pack_finalize(fhdr, hdr)) {
fp = org_fp; fp = org_fp;
goto out_addrs; goto out_addrs;
} }
...@@ -348,7 +348,7 @@ void bpf_jit_free(struct bpf_prog *fp) ...@@ -348,7 +348,7 @@ void bpf_jit_free(struct bpf_prog *fp)
* before freeing it. * before freeing it.
*/ */
if (jit_data) { if (jit_data) {
bpf_jit_binary_pack_finalize(fp, jit_data->fhdr, jit_data->hdr); bpf_jit_binary_pack_finalize(jit_data->fhdr, jit_data->hdr);
kvfree(jit_data->addrs); kvfree(jit_data->addrs);
kfree(jit_data); kfree(jit_data);
} }
......
...@@ -178,8 +178,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog) ...@@ -178,8 +178,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
prog->jited_len = prog_size - cfi_get_offset(); prog->jited_len = prog_size - cfi_get_offset();
if (!prog->is_func || extra_pass) { if (!prog->is_func || extra_pass) {
if (WARN_ON(bpf_jit_binary_pack_finalize(prog, jit_data->ro_header, if (WARN_ON(bpf_jit_binary_pack_finalize(jit_data->ro_header, jit_data->header))) {
jit_data->header))) {
/* ro_header has been freed */ /* ro_header has been freed */
jit_data->ro_header = NULL; jit_data->ro_header = NULL;
prog = orig_prog; prog = orig_prog;
...@@ -258,7 +257,7 @@ void bpf_jit_free(struct bpf_prog *prog) ...@@ -258,7 +257,7 @@ void bpf_jit_free(struct bpf_prog *prog)
* before freeing it. * before freeing it.
*/ */
if (jit_data) { if (jit_data) {
bpf_jit_binary_pack_finalize(prog, jit_data->ro_header, jit_data->header); bpf_jit_binary_pack_finalize(jit_data->ro_header, jit_data->header);
kfree(jit_data); kfree(jit_data);
} }
hdr = bpf_jit_binary_pack_hdr(prog); hdr = bpf_jit_binary_pack_hdr(prog);
......
...@@ -3356,7 +3356,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog) ...@@ -3356,7 +3356,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
* *
* Both cases are serious bugs and justify WARN_ON. * Both cases are serious bugs and justify WARN_ON.
*/ */
if (WARN_ON(bpf_jit_binary_pack_finalize(prog, header, rw_header))) { if (WARN_ON(bpf_jit_binary_pack_finalize(header, rw_header))) {
/* header has been freed */ /* header has been freed */
header = NULL; header = NULL;
goto out_image; goto out_image;
...@@ -3435,7 +3435,7 @@ void bpf_jit_free(struct bpf_prog *prog) ...@@ -3435,7 +3435,7 @@ void bpf_jit_free(struct bpf_prog *prog)
* before freeing it. * before freeing it.
*/ */
if (jit_data) { if (jit_data) {
bpf_jit_binary_pack_finalize(prog, jit_data->header, bpf_jit_binary_pack_finalize(jit_data->header,
jit_data->rw_header); jit_data->rw_header);
kvfree(jit_data->addrs); kvfree(jit_data->addrs);
kfree(jit_data); kfree(jit_data);
......
...@@ -2933,8 +2933,7 @@ bpf_probe_read_kernel_common(void *dst, u32 size, const void *unsafe_ptr) ...@@ -2933,8 +2933,7 @@ bpf_probe_read_kernel_common(void *dst, u32 size, const void *unsafe_ptr)
return ret; return ret;
} }
void __bpf_free_used_btfs(struct bpf_prog_aux *aux, void __bpf_free_used_btfs(struct btf_mod_pair *used_btfs, u32 len);
struct btf_mod_pair *used_btfs, u32 len);
static inline struct bpf_prog *bpf_prog_get_type(u32 ufd, static inline struct bpf_prog *bpf_prog_get_type(u32 ufd,
enum bpf_prog_type type) enum bpf_prog_type type)
......
...@@ -1129,8 +1129,7 @@ bpf_jit_binary_pack_alloc(unsigned int proglen, u8 **ro_image, ...@@ -1129,8 +1129,7 @@ bpf_jit_binary_pack_alloc(unsigned int proglen, u8 **ro_image,
struct bpf_binary_header **rw_hdr, struct bpf_binary_header **rw_hdr,
u8 **rw_image, u8 **rw_image,
bpf_jit_fill_hole_t bpf_fill_ill_insns); bpf_jit_fill_hole_t bpf_fill_ill_insns);
int bpf_jit_binary_pack_finalize(struct bpf_prog *prog, int bpf_jit_binary_pack_finalize(struct bpf_binary_header *ro_header,
struct bpf_binary_header *ro_header,
struct bpf_binary_header *rw_header); struct bpf_binary_header *rw_header);
void bpf_jit_binary_pack_free(struct bpf_binary_header *ro_header, void bpf_jit_binary_pack_free(struct bpf_binary_header *ro_header,
struct bpf_binary_header *rw_header); struct bpf_binary_header *rw_header);
......
...@@ -1174,8 +1174,7 @@ bpf_jit_binary_pack_alloc(unsigned int proglen, u8 **image_ptr, ...@@ -1174,8 +1174,7 @@ bpf_jit_binary_pack_alloc(unsigned int proglen, u8 **image_ptr,
} }
/* Copy JITed text from rw_header to its final location, the ro_header. */ /* Copy JITed text from rw_header to its final location, the ro_header. */
int bpf_jit_binary_pack_finalize(struct bpf_prog *prog, int bpf_jit_binary_pack_finalize(struct bpf_binary_header *ro_header,
struct bpf_binary_header *ro_header,
struct bpf_binary_header *rw_header) struct bpf_binary_header *rw_header)
{ {
void *ptr; void *ptr;
...@@ -2743,8 +2742,7 @@ static void bpf_free_used_maps(struct bpf_prog_aux *aux) ...@@ -2743,8 +2742,7 @@ static void bpf_free_used_maps(struct bpf_prog_aux *aux)
kfree(aux->used_maps); kfree(aux->used_maps);
} }
void __bpf_free_used_btfs(struct bpf_prog_aux *aux, void __bpf_free_used_btfs(struct btf_mod_pair *used_btfs, u32 len)
struct btf_mod_pair *used_btfs, u32 len)
{ {
#ifdef CONFIG_BPF_SYSCALL #ifdef CONFIG_BPF_SYSCALL
struct btf_mod_pair *btf_mod; struct btf_mod_pair *btf_mod;
...@@ -2761,7 +2759,7 @@ void __bpf_free_used_btfs(struct bpf_prog_aux *aux, ...@@ -2761,7 +2759,7 @@ void __bpf_free_used_btfs(struct bpf_prog_aux *aux,
static void bpf_free_used_btfs(struct bpf_prog_aux *aux) static void bpf_free_used_btfs(struct bpf_prog_aux *aux)
{ {
__bpf_free_used_btfs(aux, aux->used_btfs, aux->used_btf_cnt); __bpf_free_used_btfs(aux->used_btfs, aux->used_btf_cnt);
kfree(aux->used_btfs); kfree(aux->used_btfs);
} }
......
...@@ -91,7 +91,7 @@ void bpf_verifier_vlog(struct bpf_verifier_log *log, const char *fmt, ...@@ -91,7 +91,7 @@ void bpf_verifier_vlog(struct bpf_verifier_log *log, const char *fmt,
goto fail; goto fail;
} else { } else {
u64 new_end, new_start; u64 new_end, new_start;
u32 buf_start, buf_end, new_n; u32 buf_start, buf_end;
new_end = log->end_pos + n; new_end = log->end_pos + n;
if (new_end - log->start_pos >= log->len_total) if (new_end - log->start_pos >= log->len_total)
......
...@@ -18694,8 +18694,7 @@ static void release_maps(struct bpf_verifier_env *env) ...@@ -18694,8 +18694,7 @@ static void release_maps(struct bpf_verifier_env *env)
/* drop refcnt of maps used by the rejected program */ /* drop refcnt of maps used by the rejected program */
static void release_btfs(struct bpf_verifier_env *env) static void release_btfs(struct bpf_verifier_env *env)
{ {
__bpf_free_used_btfs(env->prog->aux, env->used_btfs, __bpf_free_used_btfs(env->used_btfs, env->used_btf_cnt);
env->used_btf_cnt);
} }
/* convert pseudo BPF_LD_IMM64 into generic BPF_LD_IMM64 */ /* convert pseudo BPF_LD_IMM64 into generic BPF_LD_IMM64 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment