diff options
Diffstat (limited to 'kernel/bpf/hashtab.c')
| -rw-r--r-- | kernel/bpf/hashtab.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/bpf/hashtab.c b/kernel/bpf/hashtab.c index b76828f23b49..3ca2198a6d22 100644 --- a/kernel/bpf/hashtab.c +++ b/kernel/bpf/hashtab.c @@ -503,7 +503,9 @@ static u32 htab_map_gen_lookup(struct bpf_map *map, struct bpf_insn *insn_buf)  	struct bpf_insn *insn = insn_buf;  	const int ret = BPF_REG_0; -	*insn++ = BPF_EMIT_CALL((u64 (*)(u64, u64, u64, u64, u64))__htab_map_lookup_elem); +	BUILD_BUG_ON(!__same_type(&__htab_map_lookup_elem, +		     (void *(*)(struct bpf_map *map, void *key))NULL)); +	*insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));  	*insn++ = BPF_JMP_IMM(BPF_JEQ, ret, 0, 1);  	*insn++ = BPF_ALU64_IMM(BPF_ADD, ret,  				offsetof(struct htab_elem, key) + @@ -530,7 +532,9 @@ static u32 htab_lru_map_gen_lookup(struct bpf_map *map,  	const int ret = BPF_REG_0;  	const int ref_reg = BPF_REG_1; -	*insn++ = BPF_EMIT_CALL((u64 (*)(u64, u64, u64, u64, u64))__htab_map_lookup_elem); +	BUILD_BUG_ON(!__same_type(&__htab_map_lookup_elem, +		     (void *(*)(struct bpf_map *map, void *key))NULL)); +	*insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));  	*insn++ = BPF_JMP_IMM(BPF_JEQ, ret, 0, 4);  	*insn++ = BPF_LDX_MEM(BPF_B, ref_reg, ret,  			      offsetof(struct htab_elem, lru_node) + @@ -1369,7 +1373,9 @@ static u32 htab_of_map_gen_lookup(struct bpf_map *map,  	struct bpf_insn *insn = insn_buf;  	const int ret = BPF_REG_0; -	*insn++ = BPF_EMIT_CALL((u64 (*)(u64, u64, u64, u64, u64))__htab_map_lookup_elem); +	BUILD_BUG_ON(!__same_type(&__htab_map_lookup_elem, +		     (void *(*)(struct bpf_map *map, void *key))NULL)); +	*insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));  	*insn++ = BPF_JMP_IMM(BPF_JEQ, ret, 0, 2);  	*insn++ = BPF_ALU64_IMM(BPF_ADD, ret,  				offsetof(struct htab_elem, key) +  | 
