mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
bpf: fix cb access in socket filter programs
eBPF socket filter programs may see junk in 'u32 cb[5]' area,
since it could have been used by protocol layers earlier.
For socket filter programs used in af_packet we need to clean
20 bytes of skb->cb area if it could be used by the program.
For programs attached to TCP/UDP sockets we need to save/restore
these 20 bytes, since it's used by protocol layers.
Remove SK_RUN_FILTER macro, since it's no longer used.
Long term we may move this bpf cb area to per-cpu scratch, but that
requires addition of new 'per-cpu load/store' instructions,
so not suitable as a short term fix.
Fixes: d691f9e8d4
("bpf: allow programs to write to certain skb fields")
Reported-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d49ae37c61
commit
ff936a04e5
5 changed files with 51 additions and 18 deletions
|
@ -100,6 +100,8 @@ enum bpf_access_type {
|
|||
BPF_WRITE = 2
|
||||
};
|
||||
|
||||
struct bpf_prog;
|
||||
|
||||
struct bpf_verifier_ops {
|
||||
/* return eBPF function prototype for verification */
|
||||
const struct bpf_func_proto *(*get_func_proto)(enum bpf_func_id func_id);
|
||||
|
@ -111,7 +113,7 @@ struct bpf_verifier_ops {
|
|||
|
||||
u32 (*convert_ctx_access)(enum bpf_access_type type, int dst_reg,
|
||||
int src_reg, int ctx_off,
|
||||
struct bpf_insn *insn);
|
||||
struct bpf_insn *insn, struct bpf_prog *prog);
|
||||
};
|
||||
|
||||
struct bpf_prog_type_list {
|
||||
|
@ -120,8 +122,6 @@ struct bpf_prog_type_list {
|
|||
enum bpf_prog_type type;
|
||||
};
|
||||
|
||||
struct bpf_prog;
|
||||
|
||||
struct bpf_prog_aux {
|
||||
atomic_t refcnt;
|
||||
u32 used_map_cnt;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue