From: Yafang Shao <laoar.shao@gmail.com>
To: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
kafai@fb.com, songliubraving@fb.com, yhs@fb.com,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com,
haoluo@google.com, jolsa@kernel.org, rostedt@goodmis.org,
mhiramat@kernel.org
Cc: bpf@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
linux-kernel@vger.kernel.org, Yafang Shao <laoar.shao@gmail.com>
Subject: [PATCH bpf-next 0/6] bpf: Tracing recursion prevention mechanism improvement
Date: Mon, 17 Apr 2023 15:47:31 +0000 [thread overview]
Message-ID: <20230417154737.12740-1-laoar.shao@gmail.com> (raw)
Currently we use prog->active to prevent tracing recursion, but it has
some downsides,
- It can't identify different contexts
That said, if a process context is interrupted by a irq context and
the irq context runs the same code path, it will be considered as
recursion. For example,
normal:
this_cpu_inc_return(*(prog->active)) == 1 <- OK
irq:
this_cpu_inc_return(*(prog->active)) == 1 <- FAIL!
[ Considered as recusion ]
- It has to maintain a percpu area
A percpu area will be allocated for each prog when the prog is loaded
and be freed when the prog is destroyed.
Let's replace it with the generic tracing recursion prevention mechanism,
which can work fine with anything. In the above example, the irq context
won't be considered as recursion again,
normal:
test_recursion_try_acquire() <- OK
softirq:
test_recursion_try_acquire() <- OK
irq:
test_recursion_try_acquire() <- OK
Note that, currently one single recursion in process context is allowed
due to the TRACE_CTX_TRANSITION workaround, which can be fixed in the
future. That said, below behavior is expected currently,
normal:
test_recursion_try_acquire() <- OK
[ recursion happens ] <- one single recursion is allowed
test_recursion_try_acquire() <- OK
[ recursion happens ]
test_recursion_try_acquire() <- RECURSION!
To adapt to this behavior, the bpf recursion selftest is changed.
Steven Rostedt (Google) (1):
tracing: Add generic test_recursion_try_acquire()
Yafang Shao (5):
bpf: Add __rcu_read_{lock,unlock} into btf id deny list
tracing: Add the comment for allowing one single recursion in process
context
selftests/bpf: Allow one single recursion in fentry recursion test
bpf: Improve tracing recursion prevention mechanism
bpf: Remove some denied functions from the btf id deny list
include/linux/bpf.h | 2 +-
include/linux/trace_recursion.h | 49 ++++++++++++++++------
kernel/bpf/core.c | 10 -----
kernel/bpf/trampoline.c | 44 ++++++++++++++-----
kernel/bpf/verifier.c | 10 ++---
kernel/trace/bpf_trace.c | 12 +++---
kernel/trace/ftrace.c | 2 +
tools/testing/selftests/bpf/prog_tests/recursion.c | 7 +++-
tools/testing/selftests/bpf/test_progs.h | 19 +++++++++
9 files changed, 107 insertions(+), 48 deletions(-)
--
1.8.3.1
next reply other threads:[~2023-04-17 15:47 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-17 15:47 Yafang Shao [this message]
2023-04-17 15:47 ` [PATCH bpf-next 1/6] bpf: Add __rcu_read_{lock,unlock} into btf id deny list Yafang Shao
2023-04-17 15:47 ` [PATCH bpf-next 2/6] tracing: Add generic test_recursion_try_acquire() Yafang Shao
2023-04-20 6:51 ` Masami Hiramatsu
2023-04-17 15:47 ` [PATCH bpf-next 3/6] tracing: Add the comment for allowing one single recursion in process context Yafang Shao
2023-04-17 15:47 ` [PATCH bpf-next 4/6] selftests/bpf: Allow one single recursion in fentry recursion test Yafang Shao
2023-04-17 15:47 ` [PATCH bpf-next 5/6] bpf: Improve tracing recursion prevention mechanism Yafang Shao
2023-04-17 20:14 ` Alexei Starovoitov
2023-04-18 1:49 ` Yafang Shao
2023-04-18 15:38 ` Alexei Starovoitov
2023-04-19 11:46 ` Yafang Shao
[not found] ` <CAADnVQ+FO-+1OALTtgVkcpH3Adc6xS9qjzORyq2vwVtwY2UoxQ@mail.gmail.com>
2023-04-24 21:40 ` Steven Rostedt
2023-04-27 9:57 ` Yafang Shao
2023-04-27 12:15 ` Yafang Shao
2023-04-27 12:35 ` Yafang Shao
2023-04-17 23:29 ` kernel test robot
2023-04-27 13:26 ` Steven Rostedt
2023-04-27 14:22 ` Yafang Shao
2023-04-27 15:18 ` Steven Rostedt
2023-04-27 15:23 ` Yafang Shao
2023-04-27 15:36 ` Steven Rostedt
2023-04-27 15:39 ` Alexei Starovoitov
2023-04-27 15:43 ` Yafang Shao
2023-04-27 15:46 ` Steven Rostedt
2023-04-17 15:47 ` [PATCH bpf-next 6/6] bpf: Remove some denied functions from the btf id deny list Yafang Shao
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=20230417154737.12740-1-laoar.shao@gmail.com \
--to=laoar.shao@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=kafai@fb.com \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=rostedt@goodmis.org \
--cc=sdf@google.com \
--cc=songliubraving@fb.com \
--cc=yhs@fb.com \
/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;
as well as URLs for NNTP newsgroup(s).