summaryrefslogtreecommitdiffstats
path: root/kernel/bpf/sockmap.c
diff options
context:
space:
mode:
authorJohn Fastabend <john.fastabend@gmail.com>2017-08-28 07:11:43 -0700
committerDavid S. Miller <davem@davemloft.net>2017-08-28 11:13:22 -0700
commit81374aaa2693f8d3cd6cf3656a02ac8cf5c7ebea (patch)
tree24e0a68c98a92ade186346a193fa6900f8ddd562 /kernel/bpf/sockmap.c
parented85054d34e2dfb5e9fac95980cf038ecf19225c (diff)
downloadlinux-81374aaa2693f8d3cd6cf3656a02ac8cf5c7ebea.tar.gz
linux-81374aaa2693f8d3cd6cf3656a02ac8cf5c7ebea.tar.bz2
linux-81374aaa2693f8d3cd6cf3656a02ac8cf5c7ebea.zip
bpf: harden sockmap program attach to ensure correct map type
When attaching a program to sockmap we need to check map type is correct. Fixes: 174a79ff9515 ("bpf: sockmap with sk redirect support") Signed-off-by: John Fastabend <john.fastabend@gmail.com> Acked-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/bpf/sockmap.c')
-rw-r--r--kernel/bpf/sockmap.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c
index 266011c822ec..38bf4e4ae2fd 100644
--- a/kernel/bpf/sockmap.c
+++ b/kernel/bpf/sockmap.c
@@ -794,6 +794,9 @@ int sock_map_attach_prog(struct bpf_map *map, struct bpf_prog *prog, u32 type)
struct bpf_stab *stab = container_of(map, struct bpf_stab, map);
struct bpf_prog *orig;
+ if (unlikely(map->map_type != BPF_MAP_TYPE_SOCKMAP))
+ return -EINVAL;
+
switch (type) {
case BPF_SK_SKB_STREAM_PARSER:
orig = xchg(&stab->bpf_parse, prog);