diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0097-bpf-fix-bpf_tail_call-x64-JIT.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.9.21/0097-bpf-fix-bpf_tail_call-x64-JIT.patch | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0097-bpf-fix-bpf_tail_call-x64-JIT.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0097-bpf-fix-bpf_tail_call-x64-JIT.patch deleted file mode 100644 index 3dc0c637..00000000 --- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0097-bpf-fix-bpf_tail_call-x64-JIT.patch +++ /dev/null @@ -1,62 +0,0 @@ -From ecfa2d777b29f5947197dd304baf515d1ac16355 Mon Sep 17 00:00:00 2001 -From: Alexei Starovoitov <ast@fb.com> -Date: Mon, 29 Jan 2018 02:48:55 +0100 -Subject: [PATCH 097/103] bpf: fix bpf_tail_call() x64 JIT - -[ upstream commit 90caccdd8cc0215705f18b92771b449b01e2474a ] - -- bpf prog_array just like all other types of bpf array accepts 32-bit index. - Clarify that in the comment. -- fix x64 JIT of bpf_tail_call which was incorrectly loading 8 instead of 4 bytes -- tighten corresponding check in the interpreter to stay consistent - -The JIT bug can be triggered after introduction of BPF_F_NUMA_NODE flag -in commit 96eabe7a40aa in 4.14. Before that the map_flags would stay zero and -though JIT code is wrong it will check bounds correctly. -Hence two fixes tags. All other JITs don't have this problem. - -Signed-off-by: Alexei Starovoitov <ast@kernel.org> -Fixes: 96eabe7a40aa ("bpf: Allow selecting numa node during map creation") -Fixes: b52f00e6a715 ("x86: bpf_jit: implement bpf_tail_call() helper") -Acked-by: Daniel Borkmann <daniel@iogearbox.net> -Acked-by: Martin KaFai Lau <kafai@fb.com> -Reviewed-by: Eric Dumazet <edumazet@google.com> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - arch/x86/net/bpf_jit_comp.c | 4 ++-- - kernel/bpf/core.c | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c -index ece29e2..7840331 100644 ---- a/arch/x86/net/bpf_jit_comp.c -+++ b/arch/x86/net/bpf_jit_comp.c -@@ -278,9 +278,9 @@ static void emit_bpf_tail_call(u8 **pprog) - /* if (index >= array->map.max_entries) - * goto out; - */ -- EMIT4(0x48, 0x8B, 0x46, /* mov rax, qword ptr [rsi + 16] */ -+ EMIT2(0x89, 0xD2); /* mov edx, edx */ -+ EMIT3(0x39, 0x56, /* cmp dword ptr [rsi + 16], edx */ - offsetof(struct bpf_array, map.max_entries)); -- EMIT3(0x48, 0x39, 0xD0); /* cmp rax, rdx */ - #define OFFSET1 43 /* number of bytes to jump */ - EMIT2(X86_JBE, OFFSET1); /* jbe out */ - label1 = cnt; -diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c -index aa6d981..ab9576b 100644 ---- a/kernel/bpf/core.c -+++ b/kernel/bpf/core.c -@@ -715,7 +715,7 @@ static unsigned int __bpf_prog_run(void *ctx, const struct bpf_insn *insn) - struct bpf_map *map = (struct bpf_map *) (unsigned long) BPF_R2; - struct bpf_array *array = container_of(map, struct bpf_array, map); - struct bpf_prog *prog; -- u64 index = BPF_R3; -+ u32 index = BPF_R3; - - if (unlikely(index >= array->map.max_entries)) - goto out; --- -2.7.4 - |