From: <gregkh@linuxfoundation.org>
To: daniel@iogearbox.net, ast@kernel.org, gregkh@linuxfoundation.org
Cc: <stable@vger.kernel.org>, <stable-commits@vger.kernel.org>
Subject: Patch "bpf: reject stores into ctx via st and xadd" has been added to the 4.9-stable tree
Date: Mon, 29 Jan 2018 13:35:03 +0100 [thread overview]
Message-ID: <15172293038726@kroah.com> (raw)
In-Reply-To: <bf502ba70d86b457adcbd695412af739a1d036f5.1517190207.git.daniel@iogearbox.net>
This is a note to let you know that I've just added the patch titled
bpf: reject stores into ctx via st and xadd
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
bpf-reject-stores-into-ctx-via-st-and-xadd.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
>From foo@baz Mon Jan 29 13:22:08 CET 2018
From: Daniel Borkmann <daniel@iogearbox.net>
Date: Mon, 29 Jan 2018 02:49:01 +0100
Subject: bpf: reject stores into ctx via st and xadd
To: gregkh@linuxfoundation.org
Cc: ast@kernel.org, stable@vger.kernel.org, Daniel Borkmann <daniel@iogearbox.net>
Message-ID: <bf502ba70d86b457adcbd695412af739a1d036f5.1517190207.git.daniel@iogearbox.net>
From: Daniel Borkmann <daniel@iogearbox.net>
[ upstream commit f37a8cb84cce18762e8f86a70bd6a49a66ab964c ]
Alexei found that verifier does not reject stores into context
via BPF_ST instead of BPF_STX. And while looking at it, we
also should not allow XADD variant of BPF_STX.
The context rewriter is only assuming either BPF_LDX_MEM- or
BPF_STX_MEM-type operations, thus reject anything other than
that so that assumptions in the rewriter properly hold. Add
test cases as well for BPF selftests.
Fixes: d691f9e8d440 ("bpf: allow programs to write to certain skb fields")
Reported-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
kernel/bpf/verifier.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -702,6 +702,13 @@ static bool is_pointer_value(struct bpf_
return __is_pointer_value(env->allow_ptr_leaks, &env->cur_state.regs[regno]);
}
+static bool is_ctx_reg(struct bpf_verifier_env *env, int regno)
+{
+ const struct bpf_reg_state *reg = &env->cur_state.regs[regno];
+
+ return reg->type == PTR_TO_CTX;
+}
+
static int check_ptr_alignment(struct bpf_verifier_env *env,
struct bpf_reg_state *reg, int off, int size)
{
@@ -896,6 +903,12 @@ static int check_xadd(struct bpf_verifie
return -EACCES;
}
+ if (is_ctx_reg(env, insn->dst_reg)) {
+ verbose("BPF_XADD stores into R%d context is not allowed\n",
+ insn->dst_reg);
+ return -EACCES;
+ }
+
/* check whether atomic_add can read the memory */
err = check_mem_access(env, insn->dst_reg, insn->off,
BPF_SIZE(insn->code), BPF_READ, -1);
@@ -3012,6 +3025,12 @@ static int do_check(struct bpf_verifier_
if (err)
return err;
+ if (is_ctx_reg(env, insn->dst_reg)) {
+ verbose("BPF_ST stores into R%d context is not allowed\n",
+ insn->dst_reg);
+ return -EACCES;
+ }
+
/* check that memory (dst_reg + off) is writeable */
err = check_mem_access(env, insn->dst_reg, insn->off,
BPF_SIZE(insn->code), BPF_WRITE,
Patches currently in stable-queue which might be from daniel@iogearbox.net are
queue-4.9/bpf-avoid-false-sharing-of-map-refcount-with-max_entries.patch
queue-4.9/x86-bpf_jit-small-optimization-in-emit_bpf_tail_call.patch
queue-4.9/bpf-reject-stores-into-ctx-via-st-and-xadd.patch
queue-4.9/bpf-fix-32-bit-divide-by-zero.patch
queue-4.9/bpf-fix-bpf_tail_call-x64-jit.patch
queue-4.9/bpf-arsh-is-not-supported-in-32-bit-alu-thus-reject-it.patch
queue-4.9/bpf-fix-divides-by-zero.patch
queue-4.9/bpf-introduce-bpf_jit_always_on-config.patch
next prev parent reply other threads:[~2018-01-29 20:12 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-29 1:48 [PATCH stable 4.9 0/8] BPF stable patches Daniel Borkmann
2018-01-29 1:48 ` [PATCH stable 4.9 1/8] x86: bpf_jit: small optimization in emit_bpf_tail_call() Daniel Borkmann
2018-01-29 6:39 ` Willy Tarreau
2018-01-29 14:04 ` Eric Dumazet
2018-01-29 14:06 ` Willy Tarreau
2018-01-29 12:35 ` Patch "x86: bpf_jit: small optimization in emit_bpf_tail_call()" has been added to the 4.9-stable tree gregkh
2018-01-29 1:48 ` [PATCH stable 4.9 2/8] bpf: fix bpf_tail_call() x64 JIT Daniel Borkmann
2018-01-29 12:35 ` Patch "bpf: fix bpf_tail_call() x64 JIT" has been added to the 4.9-stable tree gregkh
2018-01-29 1:48 ` [PATCH stable 4.9 3/8] bpf: introduce BPF_JIT_ALWAYS_ON config Daniel Borkmann
2018-01-29 12:35 ` Patch "bpf: introduce BPF_JIT_ALWAYS_ON config" has been added to the 4.9-stable tree gregkh
2018-01-29 1:48 ` [PATCH stable 4.9 4/8] bpf: arsh is not supported in 32 bit alu thus reject it Daniel Borkmann
2018-01-29 12:34 ` Patch "bpf: arsh is not supported in 32 bit alu thus reject it" has been added to the 4.9-stable tree gregkh
2018-01-29 1:48 ` [PATCH stable 4.9 5/8] bpf: avoid false sharing of map refcount with max_entries Daniel Borkmann
2018-01-29 12:34 ` Patch "bpf: avoid false sharing of map refcount with max_entries" has been added to the 4.9-stable tree gregkh
2018-01-29 1:48 ` [PATCH stable 4.9 6/8] bpf: fix divides by zero Daniel Borkmann
2018-01-29 12:35 ` Patch "bpf: fix divides by zero" has been added to the 4.9-stable tree gregkh
2018-01-29 1:49 ` [PATCH stable 4.9 7/8] bpf: fix 32-bit divide by zero Daniel Borkmann
2018-01-29 12:34 ` Patch "bpf: fix 32-bit divide by zero" has been added to the 4.9-stable tree gregkh
2018-01-29 1:49 ` [PATCH stable 4.9 8/8] bpf: reject stores into ctx via st and xadd Daniel Borkmann
2018-01-29 12:35 ` gregkh [this message]
2018-01-29 12:30 ` [PATCH stable 4.9 0/8] BPF stable patches Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=15172293038726@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=stable-commits@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.