From: Hao Sun <sunhao.th@gmail.com>
To: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
John Fastabend <john.fastabend@gmail.com>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@google.com>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>
Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
Hao Sun <sunhao.th@gmail.com>
Subject: [PATCH bpf-next v3 0/3] bpf: Detect jumping to reserved code of ld_imm64
Date: Wed, 11 Oct 2023 11:00:11 +0200 [thread overview]
Message-ID: <20231011-jmp-into-reserved-fields-v3-0-97d2aa979788@gmail.com> (raw)
Currently, the verifier rejects a program jumping to reserved code with
the log "invalid BPF_LD_IMM" in check_ld_imm(), which in not accurate,
because the program does not contain any invalid insns. The root cause
is that the verifier does not detect such jump, thus the reserved code
is passed to check_ld_imm().
The first patch makes the verifier detect jump to reserved code during
check_cfg(). Because jump to reserved code is just like jump out bound,
both break the CFG integrity immediately. The second makes the verifier
report internal error if it sees an invlid ld_imm64 in check_ld_imm(),
because we already have bpf_opcode_in_insntable() to check the validity
of insn code. The third patch adapts existing tests to make them pass,
and add a new case to test backward jump to reserved code.
Signed-off-by: Hao Sun <sunhao.th@gmail.com>
---
Changes in v3:
- Separate changes to different commits, change verifier log
- Link to v2: https://lore.kernel.org/r/20231010-jmp-into-reserved-fields-v2-1-3dd5a94d1e21@gmail.com
Changes in v2:
- Adjust existing test cases
- Link to v1: https://lore.kernel.org/bpf/20231009-jmp-into-reserved-fields-v1-1-d8006e2ac1f6@gmail.com/
---
Hao Sun (3):
bpf: Detect jumping to reserved code during check_cfg()
bpf: Report internal error on incorrect ld_imm64 in check_ld_imm()
bpf: Adapt and add tests for detecting jump to reserved code
kernel/bpf/verifier.c | 11 +++++++++--
tools/testing/selftests/bpf/verifier/ld_imm64.c | 16 ++++++++++++----
2 files changed, 21 insertions(+), 6 deletions(-)
---
base-commit: 3157b7ce14bbf468b0ca8613322a05c37b5ae25d
change-id: 20231009-jmp-into-reserved-fields-fc1a98a8e7dc
Best regards,
--
Hao Sun <sunhao.th@gmail.com>
next reply other threads:[~2023-10-11 9:01 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-11 9:00 Hao Sun [this message]
2023-10-11 9:00 ` [PATCH bpf-next v3 1/3] bpf: Detect jumping to reserved code during check_cfg() Hao Sun
2023-10-11 13:38 ` Alexei Starovoitov
2023-10-12 6:32 ` Hao Sun
2023-10-12 8:14 ` Shung-Hsi Yu
2023-10-12 15:02 ` Alexei Starovoitov
2023-10-13 3:27 ` Shung-Hsi Yu
2023-10-20 0:25 ` Alexei Starovoitov
2023-10-24 11:57 ` Shung-Hsi Yu
2023-10-11 9:00 ` [PATCH bpf-next v3 2/3] bpf: Report internal error on incorrect ld_imm64 in check_ld_imm() Hao Sun
2023-10-11 9:00 ` [PATCH bpf-next v3 3/3] bpf: Adapt and add tests for detecting jump to reserved code Hao Sun
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=20231011-jmp-into-reserved-fields-v3-0-97d2aa979788@gmail.com \
--to=sunhao.th@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=sdf@google.com \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox