diff options
Diffstat (limited to 'kernel/bpf/bpf_struct_ops.c')
| -rw-r--r-- | kernel/bpf/bpf_struct_ops.c | 7 | 
1 files changed, 5 insertions, 2 deletions
| diff --git a/kernel/bpf/bpf_struct_ops.c b/kernel/bpf/bpf_struct_ops.c index d6731c32864e..9abcc33f02cf 100644 --- a/kernel/bpf/bpf_struct_ops.c +++ b/kernel/bpf/bpf_struct_ops.c @@ -368,6 +368,7 @@ static int bpf_struct_ops_map_update_elem(struct bpf_map *map, void *key,  		const struct btf_type *mtype, *ptype;  		struct bpf_prog *prog;  		u32 moff; +		u32 flags;  		moff = btf_member_bit_offset(t, member) / 8;  		ptype = btf_type_resolve_ptr(btf_vmlinux, member->type, NULL); @@ -431,10 +432,12 @@ static int bpf_struct_ops_map_update_elem(struct bpf_map *map, void *key,  		tprogs[BPF_TRAMP_FENTRY].progs[0] = prog;  		tprogs[BPF_TRAMP_FENTRY].nr_progs = 1; +		flags = st_ops->func_models[i].ret_size > 0 ? +			BPF_TRAMP_F_RET_FENTRY_RET : 0;  		err = arch_prepare_bpf_trampoline(NULL, image,  						  st_map->image + PAGE_SIZE, -						  &st_ops->func_models[i], 0, -						  tprogs, NULL); +						  &st_ops->func_models[i], +						  flags, tprogs, NULL);  		if (err < 0)  			goto reset_unlock; |