summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2018-08-02 09:53:19 -0400
committerPaul Gortmaker <paul.gortmaker@windriver.com>2018-08-02 09:53:19 -0400
commitfe06eda9cfa431b199c1b6203d8bbe44e7e47c69 (patch)
tree2b181f985a1fc3aaf2f94c2e22fff344dabbc02a
parentb7274c6e077388435e63e61459bdf8e997515d0d (diff)
downloadlongterm-queue-4.12-fe06eda9cfa431b199c1b6203d8bbe44e7e47c69.tar.gz
bpf: borrow 4.9.x version of backport from stable-queue
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r--queue/bpf-fix-incorrect-sign-extension-in-check_alu_op.patch51
1 files changed, 32 insertions, 19 deletions
diff --git a/queue/bpf-fix-incorrect-sign-extension-in-check_alu_op.patch b/queue/bpf-fix-incorrect-sign-extension-in-check_alu_op.patch
index 25178f6..bafa97f 100644
--- a/queue/bpf-fix-incorrect-sign-extension-in-check_alu_op.patch
+++ b/queue/bpf-fix-incorrect-sign-extension-in-check_alu_op.patch
@@ -1,9 +1,17 @@
-From 95a762e2c8c942780948091f8f2a4f32fce1ac6f Mon Sep 17 00:00:00 2001
+From foo@baz Fri Dec 22 16:57:35 CET 2017
+From: Daniel Borkmann <daniel@iogearbox.net>
+Date: Fri, 22 Dec 2017 16:29:05 +0100
+Subject: bpf: fix incorrect sign extension in check_alu_op()
+To: gregkh@linuxfoundation.org
+Cc: ast@kernel.org, daniel@iogearbox.net, jannh@google.com, stable@vger.kernel.org
+Message-ID: <20171222152905.3455-5-daniel@iogearbox.net>
+
+From: Daniel Borkmann <daniel@iogearbox.net>
+
+
From: Jann Horn <jannh@google.com>
-Date: Mon, 18 Dec 2017 20:11:54 -0800
-Subject: [PATCH] bpf: fix incorrect sign extension in check_alu_op()
-commit 95a762e2c8c942780948091f8f2a4f32fce1ac6f upstream.
+[ Upstream commit 95a762e2c8c942780948091f8f2a4f32fce1ac6f ]
Distinguish between
BPF_ALU64|BPF_MOV|BPF_K (load 32-bit immediate, sign-extended to 64-bit)
@@ -23,26 +31,31 @@ Signed-off-by: Jann Horn <jannh@google.com>
Acked-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/bpf/verifier.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
-diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
-index 625e358ca765..c086010ae51e 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
-@@ -2408,7 +2408,13 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn)
+@@ -1790,10 +1790,17 @@ static int check_alu_op(struct bpf_verif
+ /* case: R = imm
* remember the value we stored into this reg
*/
- regs[insn->dst_reg].type = SCALAR_VALUE;
-- __mark_reg_known(regs + insn->dst_reg, insn->imm);
-+ if (BPF_CLASS(insn->code) == BPF_ALU64) {
-+ __mark_reg_known(regs + insn->dst_reg,
-+ insn->imm);
-+ } else {
-+ __mark_reg_known(regs + insn->dst_reg,
-+ (u32)insn->imm);
-+ }
++ u64 imm;
++
++ if (BPF_CLASS(insn->code) == BPF_ALU64)
++ imm = insn->imm;
++ else
++ imm = (u32)insn->imm;
++
+ regs[insn->dst_reg].type = CONST_IMM;
+- regs[insn->dst_reg].imm = insn->imm;
+- regs[insn->dst_reg].max_value = insn->imm;
+- regs[insn->dst_reg].min_value = insn->imm;
++ regs[insn->dst_reg].imm = imm;
++ regs[insn->dst_reg].max_value = imm;
++ regs[insn->dst_reg].min_value = imm;
}
} else if (opcode > BPF_END) {
---
-2.15.0
-