From: Stanislav Fomichev <sdf@google.com>
To: netdev@vger.kernel.org, bpf@vger.kernel.org
Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net,
Stanislav Fomichev <sdf@google.com>
Subject: [PATCH bpf 0/4] bpf: remove __rcu annotations from bpf_prog_array
Date: Wed, 8 May 2019 10:18:41 -0700 [thread overview]
Message-ID: <20190508171845.201303-1-sdf@google.com> (raw)
Right now we are not using rcu api correctly: we pass __rcu pointers
to bpf_prog_array_xyz routines but don't use rcu_dereference on them
(see bpf_prog_array_delete_safe and bpf_prog_array_copy in particular).
Instead of sprinkling rcu_dereferences, let's just get rid of those
__rcu annotations and move rcu handling to a higher level.
It looks like all those routines are called from the rcu update
side and we can use simple rcu_dereference_protected to get a
reference that is valid as long as we hold a mutex (i.e. no other
updater can change the pointer, no need for rcu read section and
there should not be a use-after-free problem).
To be fair, there is currently no issue with the existing approach
since the calls are mutex-protected, pointer values don't change,
__rcu annotations are ignored. But it's still nice to use proper api.
The series fixes the following sparse warnings:
kernel/bpf/core.c:1876:44: warning: incorrect type in initializer (different address spaces)
kernel/bpf/core.c:1876:44: expected struct bpf_prog_array_item *item
kernel/bpf/core.c:1876:44: got struct bpf_prog_array_item [noderef] <asn:4> *
kernel/bpf/core.c:1900:26: warning: incorrect type in assignment (different address spaces)
kernel/bpf/core.c:1900:26: expected struct bpf_prog_array_item *existing
kernel/bpf/core.c:1900:26: got struct bpf_prog_array_item [noderef] <asn:4> *
kernel/bpf/core.c:1934:26: warning: incorrect type in assignment (different address spaces)
kernel/bpf/core.c:1934:26: expected struct bpf_prog_array_item *[assigned] existing
kernel/bpf/core.c:1934:26: got struct bpf_prog_array_item [noderef] <asn:4> *
Stanislav Fomichev (4):
bpf: remove __rcu annotations from bpf_prog_array
bpf: media: properly use bpf_prog_array api
bpf: cgroup: properly use bpf_prog_array api
bpf: tracing: properly use bpf_prog_array api
drivers/media/rc/bpf-lirc.c | 27 +++++++++++++++++----------
include/linux/bpf-cgroup.h | 2 +-
include/linux/bpf.h | 12 ++++++------
kernel/bpf/cgroup.c | 27 +++++++++++++++++----------
kernel/bpf/core.c | 31 ++++++++++++-------------------
kernel/trace/bpf_trace.c | 18 ++++++++++--------
6 files changed, 63 insertions(+), 54 deletions(-)
--
2.21.0.1020.gf2820cf01a-goog
next reply other threads:[~2019-05-08 17:18 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-08 17:18 Stanislav Fomichev [this message]
2019-05-08 17:18 ` [PATCH bpf 1/4] bpf: remove __rcu annotations from bpf_prog_array Stanislav Fomichev
2019-05-08 17:18 ` [PATCH bpf 2/4] bpf: media: properly use bpf_prog_array api Stanislav Fomichev
2019-05-08 17:18 ` [PATCH bpf 3/4] bpf: cgroup: " Stanislav Fomichev
2019-05-08 17:18 ` [PATCH bpf 4/4] bpf: tracing: " Stanislav Fomichev
2019-05-08 17:56 ` [PATCH bpf 0/4] bpf: remove __rcu annotations from bpf_prog_array Alexei Starovoitov
2019-05-08 18:12 ` Stanislav Fomichev
2019-05-13 18:57 ` Stanislav Fomichev
2019-05-14 16:55 ` Alexei Starovoitov
2019-05-14 17:30 ` Stanislav Fomichev
2019-05-14 17:45 ` Alexei Starovoitov
2019-05-14 17:53 ` Stanislav Fomichev
2019-05-15 1:25 ` Alexei Starovoitov
2019-05-15 2:11 ` Stanislav Fomichev
2019-05-15 2:27 ` Alexei Starovoitov
2019-05-15 2:44 ` Eric Dumazet
2019-05-15 2:56 ` Stanislav Fomichev
2019-05-15 3:16 ` Alexei Starovoitov
2019-05-15 3:38 ` Stanislav Fomichev
2019-05-15 3:42 ` Alexei Starovoitov
2019-05-15 3:49 ` Stanislav Fomichev
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=20190508171845.201303-1-sdf@google.com \
--to=sdf@google.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=netdev@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.